Java 之 I/O

整理《疯狂java编程》Java 之 I/O15章

IO流分为输入流(InputStream)输出流(OutputStream)两类
按流所处理的数据类型又可以分为字节流字符流(用于处理Unicode字符数据)两类

字节流主要是由 InputStream和OutputStream作为基类,而字符流主要是由 Reader和Writer作为基类的

节点流(低级流) 和 处理流(高级流):
JAVA使用处理流来包装节点流式一种典型的装饰器设计模式,通过使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出功能,这就允许Java应用程序采用相同的代码,透明的方式来访问不同输入\输出设备的数据流。所以处理流也叫做包装流

下图说明相关体系:

Java 之 I/O

 

文件类:(File):
提供文件操作功能(File可以创建,删除等操作对文件或目录,但是要访问文件内容,就必须用到输入/输出流)

1.创建File类对象:
File f;
f = new File("Test.java");
f = new File("E:\\ex\\","Test.java");

2.将目录也当作文件处理File类中提供了实现目录管理功能的方法:
File path = new File("E:\\ex\\");
File f = new File(path, "Test.java");

方法:
f.getName():返回文件名 temp.dat
f.getParent():返回文件所在目录名 data
f.getPath():返回文件路径 data\temp.dat
f.getAbsolutePath():返回绝对路径 …\data\temp.dat
f.exists():文件是否存在
f.canWrite(), f.canRead():文件是否可写、读
f.isFile(), f.isDirectory():是否为文件或目录
f.lastModified(), f.length(), f.delete():文件的最后修改日期、长度;删除文件
f.mkdir(), f.list():创建一个目录;列出目录下所有的文件

几个例子说明:

 

Java 之 I/O
 1 /** 
 2 * FileInputStream 测试
 3 * @ClassName: fileTest_1 
 4 * @Description:  
 5 * @author xingle
 6 * @date 2014-4-15 下午3:12:54  
 7 */
 8 public class fileTest_1 {
 9     public static void main(String[] str) throws IOException{
10         File f = new File("E:\\test.txt");
11         FileInputStream fis = new FileInputStream(f);       
12         byte[] buf = new byte[32];
13         int hasRead = 0;          
14         while((hasRead=fis.read(buf))>0){
15             System.out.println(new String(buf,0,hasRead));
16         }
17         if(fis!=null){
18             fis.close();
19         }
20     }
21 }
Java 之 I/O

 

Java 之 I/O
 1 /** 
 2  * FileReader 测试
 3  * @ClassName:  
 4  * @Description:  
 5  * @author xingle
 6  * @date 2014-4-15 下午2:24:12  
 7  */
 8 public class fileTest_2 {
 9     public static void main(String[] args) throws IOException  {
10         File f = new File("E:\\test.txt");
11         
12         FileReader fr = new FileReader(f);
13         char[] cbuf = new char[32];
14         int hasRead = 0;
15         try {
16             while((hasRead = fr.read(cbuf))>0){
17                 System.out.println(new String(cbuf, 0, hasRead));
18             }
19         } catch (IOException e) {
20             e.printStackTrace();
21         }finally{
22             if(fr!=null){
23                 fr.close();
24             }
25         }        
26     }
27 }
Java 之 I/O

 

Java 之 I/O
 1 /**
 2  * FileOutputStream 测试
 3  * @ClassName: fileTest_3
 4  * @Description: 把一个文件的所有内容写到另外一个文件中
 5  * @author xingle
 6  * @date 2014-4-15 下午2:45:25
 7  */
 8 public class fileTest_3 {
 9     public static void main(String[] args) throws IOException  {
10         FileInputStream fis = null;
11         FileOutputStream fos = null;
12         try{
13             File fi = new File("E:\\test.txt");
14             fis = new FileInputStream(fi);            
15             File fo = new File("E:\\testout.txt");
16             //覆盖写入
17             fos = new FileOutputStream(fo);
18             //追加写入
19             //fos = new FileOutputStream(fo,true);
20             //判断是否存在该文件
21             if (!fo.exists()) {
22                 System.out.println("file is not exist");
23                 fi.createNewFile();
24             }
25             int hasRead = 0;
26             byte[] buf = new byte[32];
27             while((hasRead=fis.read(buf))>0){
28                 fos.write(buf, 0, hasRead);
29             }
30         }catch(IOException e){
31             e.printStackTrace();
32         }finally{
33             if(fis!=null){
34                 fis.close();
35             }
36             if(fos!=null){
37                 fos.close();
38             }
39         }    
40     }
41 }
Java 之 I/O

 

Java 之 I/O
 1 /** 
 2  * 浏览当前目录下的所有文件和目录
 3  * @ClassName: fileTest_4 
 4  * @Description:  
 5  * @author xingle
 6  * @date 2014-4-15 下午3:31:22  
 7  */
 8 public class fileTest_4 {
 9     public static void main(String[] args){
10         File f1 = new File("");
11         String path = f1.getAbsolutePath();
12         System.out.println("当前路径:"+path);
13         File f = new File(path);
14         File[] fileLs = f.listFiles();
15                 
16         for(int i=0;i<fileLs.length;i++){
17             if(fileLs[i].isDirectory()){
18                 System.out.println( "目录-- " + fileLs[i].getName());
19             }
20             else{
21                 System.out.println("文件--"+fileLs[i].getName());
22             }
23         }        
24     }
25 }
Java 之 I/O

 

Java 之 I/O
 1 /** 
 2  * 文件过滤
 3  * @ClassName: 打印.txt结尾的文件名 
 4  * @Description:  
 5  * @author xingle
 6  * @date 2014-4-15 下午4:32:45  
 7  */
 8 public class fileTest_5 {
 9     public static void main(String[] args){
10         File f = new File("E:\\filetest");    
11         String[] files = f.list(new MyFilter());
12         for(String name:files){
13             System.out.println(name);
14         }    
15     }
16 }
17 
18 class MyFilter implements FilenameFilter{
19     @Override
20     public boolean accept(File dir, String name) {        
21         return name.endsWith(".txt");
22     }
23     
24 }
Java 之 I/O

 

过滤流—缓冲流

 

Java 之 I/O,布布扣,bubuko.com

Java 之 I/O

上一篇:Java中static关键字总结


下一篇:C++ 嵌入汇编 获取CPU信息