18.JAVA中的File和IO
File类:
不管是文件还是目录,在Java中都是以File的实例来表示,如下示例是指定查询某个目录下的所有文件与目录名称。File类是文件的抽象代表,若要作文件输出/输入,必须配合其他相关类来使用。
程序中示范了两个read()方法,一个方法可以读入指定长度的数据至数组,另一个方法一次可以读入一个字节。每次读取之后,读取的光标都会往前进,如果读不到数据则返回-1,使用available()方法获得还有多少字节可以读取。除了使用File来建立FileInputStream、FileOutputStream的实例之外,也可以直接使用字符串指定路径来建立。
BufferedReader和BufferedWriter:
1. java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。
2. 从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。
3. System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
Java代码
1.BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
下面的示例示范了BufferedReader和BufferedWriter的使用。可以在文字模式下输入字符,程序会将输入的文字存储至指定的文件中,如果要结束程序,输入quit字符串即可。01.package cn.itcast.stringstream; 02.import java.io.IOException; 03.import java.io.StringReader; 04.import java.io.StringWriter; 05.public class StringStreamTest { 06. public static void main(String[] args) { 07. String str = "abcdefghijklmn"; 08. transform(str); 09. } 10. public static void transform(String str) { 11. StringReader sr = new StringReader(str); 12. StringWriter sw = new StringWriter(); 13. char[] chars = new char[1024]; 14. try { 15. int len = 0; 16. while ((len = sr.read(chars)) != -1) {//将字符读入数组 17. String strRead = new String(chars, 0, len).toUpperCase(); 18. System.out.println(strRead); 19. sw.write(strRead); 20. sw.flush(); 21. } 22. sr.close(); 23. sw.close(); 24. } catch (IOException e) { 25. e.printStackTrace(); 26. } finally { 27. sr.close(); 28. try { 29. sw.close(); 30. } catch (IOException e) { 31. e.printStackTrace(); 32. } 33. } 34. } 35.}