Java流(Stream)、文件(File)和IO

Java 的控制台输入由 System.in 完成。

为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。

下面是创建 BufferedReader 的基本语法:

[java] view plain copy

  1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

[java] view plain copy

  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4.   
  5. public class TestRead {  
  6.   
  7.     public static void main(String[] args) throws IOException {  
  8.          char c;  
  9.             // 使用 System.in 创建 BufferedReader   
  10.             BufferedReader br = new BufferedReader(new  InputStreamReader(System.in));  
  11.             System.out.println("输入字符, 按下 'q' 键退出。");  
  12.             do {  
  13.                c = (char) br.read();  
  14.                System.out.println(c);  
  15.             } while(c != 'q');  
  16.   
  17.     }  
  18.   
  19. }  

[java] view plain copy

  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4.   
  5. public class TestRead {  
  6.   
  7.     public static void main(String[] args) throws IOException {  
  8.             // 使用 System.in 创建 BufferedReader   
  9.         BufferedReader br = new BufferedReader(new  InputStreamReader(System.in));        
  10.         String str;  
  11.         System.out.println("Enter lines of text.");  
  12.         System.out.println("Enter 'end' to quit.");  
  13.         do {  
  14.            str = br.readLine();  
  15.            System.out.println(str);  
  16.         } while(!str.equals("end"));  
  17.     }  
  18.   
  19. }  

Java流(Stream)、文件(File)和IO

 

FileInputStream

 

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件

 

[java] view plain copy

  1. File f = new File("D:/java/hello");  
  2. InputStream out = new FileInputStream(f);  

创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。

 

1 public void close() throws IOException{}
关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2 protected void finalize()throws IOException {}
这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3 public int read(int r)throws IOException{}
这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。
4 public int read(byte[] r) throws IOException{}
这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。
5 public int available() throws IOException{}
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

 

FileOutputStream

 

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:

[java] view plain copy

  1. File f = new File("D:/java/hello");  
  2. OutputStream f = new FileOutputStream(f);  
1 public void close() throws IOException{}
关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2 protected void finalize()throws IOException {}
这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3 public void write(int w)throws IOException{}
这个方法把指定的字节写到输出流中。
4 public void write(byte[] w)
把指定数组中w.length长度的字节写到OutputStream中。

 

[java] view plain copy

  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStreamWriter;  
  7.   
  8. public class fileStreamTest {  
  9.     public static void main(String[] args) throws IOException {  
  10.   
  11.         File f = new File("a.txt");  
  12.         FileOutputStream fop = new FileOutputStream(f);  
  13.         // 构建FileOutputStream对象,文件不存在会自动新建  
  14.   
  15.         OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");  
  16.         // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk  
  17.   
  18.         writer.append("二狗子");  
  19.         // 写入到缓冲区  
  20.   
  21.         writer.append("\r\n");  
  22.         // 换行  
  23.   
  24.         writer.append("English");  
  25.         // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入  
  26.   
  27.         writer.close();  
  28.         // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉  
  29.   
  30.         fop.close();  
  31.         // 关闭输出流,释放系统资源  
  32.   
  33.         FileInputStream fip = new FileInputStream(f);  
  34.         // 构建FileInputStream对象  
  35.   
  36.         InputStreamReader reader = new InputStreamReader(fip, "UTF-8");  
  37.         // 构建InputStreamReader对象,编码与写入相同  
  38.   
  39.         StringBuffer sb = new StringBuffer();  
  40.         while (reader.ready()) {  
  41.             sb.append((char) reader.read());  
  42.             // 转成char加到StringBuffer对象中  
  43.         }  
  44.         System.out.println(sb.toString());  
  45.         reader.close();  
  46.         // 关闭读取流  
  47.   
  48.         fip.close();  
  49.         // 关闭输入流,释放系统资源  
  50.   
  51.     }  
  52. }  

 

Java中的目录

 

创建目录:

File类中有两个方法可以用来创建文件夹:

  • mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
  • mkdirs()方法创建一个文件夹和它的所有父文件夹。

 

[java] view plain copy

  1. public class TestFile {  
  2.   
  3.     public static void main(String args[]) {  
  4.         String dirname = "D:/Program Files (x86)/java";  
  5.         File d = new File(dirname);  
  6.         d.mkdirs();  
  7.       }  
  8. }  

[java] view plain copy

  1. import java.io.File;  
  2.   
  3. public class TestFile {  
  4.   
  5.     public static void main(String args[]) {  
  6.         String dirname = "D:/Program Files (x86)/";  
  7.         File f1 = new File(dirname);  
  8.         if (f1.isDirectory()) {  
  9.             System.out.println("目录 " + dirname);  
  10.             String s[] = f1.list();  
  11.             for (int i = 0; i < s.length; i++) {  
  12.                 File f = new File(dirname + "/" + s[i]);  
  13.                 if (f.isDirectory()) {  
  14.                     System.out.println(s[i] + " 是一个目录");  
  15.                 } else {  
  16.                     System.out.println(s[i] + " 是一个文件");  
  17.                 }  
  18.             }  
  19.         } else {  
  20.             System.out.println(dirname + " 不是一个目录");  
  21.         }  
  22.     }  
  23. }  

[java] view plain copy

  1. import java.io.File;  
  2.   
  3. public class TestFile {  
  4.   
  5.     public static void main(String args[]) {  
  6.         File folder = new File("D:/Program Files (x86)/");  
  7.         deleteFolder(folder);  
  8.     }  
  9.   
  10.     public static void deleteFolder(File folder) {  
  11.         File[] files = folder.listFiles();  
  12.         if (files != null) {  
  13.             for (File f : files) {  
  14.                 if (f.isDirectory()) {  
  15.                     deleteFolder(f);  
  16.                 } else {  
  17.                     f.delete();  
  18.                 }  
  19.             }  
  20.         }  
  21.         folder.delete();  
  22.     }  
  23. }  


1:File(掌握)
(1)File是用来描述硬盘上的文件或者文件夹的
(2)File的构造方法
A:File file = new File("d:\\demo\\a.txt");
B:File file = new File("d:\\demo","a.txt");
C:File file = new File("d:\\demo");
  File file2 = new File(file,"a.txt");
(3)File的成员方法(自己补齐方法和中文意思)
A:创建功能
CreateNewFile()
mkdir()
mkdirs()
B:删除功能
delete()
C:重命名功能
renameTo()
D:判断功能
isDirectory()
isFile()
exists()
isHidden()
canWrite()
canRead()
E:基本获取功能
get三个
lastModifiedTime
length
F:高级获取功能
String[] filename = file.list()
File[] fileArray = file.listFiles()
G:文件名称过滤器

 

[java] view plain copy

  1. import java.io.File;  
  2.   
  3. /* 
  4.  * 需求:请把d盘目录下所有的.jpg结尾的文件名称给输出出来 
  5.  *  
  6.  * 分析: 
  7.  *      A:封装目录 
  8.  *      B:获取该目录下所有的文件或者文件夹的File数组 
  9.  *      C:遍历该File数组,得到每一个File对象 
  10.  *      D:判断该File对象 
  11.  *          先判断是否是文件 
  12.  *              是: 
  13.  *                  继续判断是否以.jpg结尾 
  14.  *                      是:输出名称 
  15.  */  
  16. public class FileTest {  
  17.     public static void main(String[] args) {  
  18.         // 封装目录  
  19.         File folder = new File("d:\\");  
  20.   
  21.         // 获取该目录下所有的文件或者文件夹的File数组  
  22.         File[] fileArray = folder.listFiles();  
  23.   
  24.         // 遍历该File数组,得到每一个File对象  
  25.         for (File file : fileArray) {  
  26.             // 先判断是否是文件  
  27.             if (file.isFile()) {  
  28.                 // 继续判断是否以.jpg结尾  
  29.                 if (file.getName().endsWith(".jpg")) {  
  30.                     System.out.println(file.getName());  
  31.                 }  
  32.             }  
  33.         }  
  34.     }  
  35. }  

 

[java] view plain copy

  1. import java.io.File;  
  2.   
  3. /* 
  4.  *public boolean isDirectory():是否是文件夹 
  5.  *public boolean isFile():是否是文件 
  6.  *public boolean exists():是否存在 
  7.  *public boolean canRead():是否可读 
  8.  *public boolean canWrite():是否可写 
  9.  *public boolean isHidden():是否隐藏 
  10.  */  
  11. public class FileDemo4 {  
  12.     public static void main(String[] args) {  
  13.         File file = new File("demo.txt");  
  14.   
  15.         System.out.println("isDirectory:" + file.isDirectory());  
  16.         System.out.println("isFile:" + file.isFile());  
  17.         System.out.println("exists:" + file.exists());  
  18.         System.out.println("canRead:" + file.canRead());  
  19.         System.out.println("canWrite:" + file.canWrite());  
  20.         System.out.println("isHidden:" + file.isHidden());  
  21.     }  
  22. }  
  23.