这里举了几个IO例子
-
使用FileReader的read(char[] cbuf)读取字符
private static final int MAX_LEN = 1024; //每次读取的最大字节数 FileInputStream in = new FileInputStream("File Path"); int len; byte[] buf = new byte[MAX_LEN]; while( (len = in.read(buf)) != -1) { //每次读取MAX_LEN个字节,len为读取到的字节数 System.out.println(buf); //System.out.println(new String(buf, 0, len)); } fileReader.close();
这个代码中的(len = in.read(buf)) != -1 解释:
我们就以内容是abcde为例:你设置的buf长度是1024,因此每次从文件中读取1024个字符。
第一次读取,fr.read(buf),因为文件中就5个字符,全被读到了buf中,此时len=5,执行循环体中的语句,输出abcde;然后程序继续执行;
第二次读取,fr.read(buf),由于文件中的数据第一次已经读完,因此此时返回值为-1,跳出循环。
所以最后输出abcde. -
使用FileReader.read()来读取
int i; while((i = fileReader.read()) != -1){ System.out.println(char(i)); } fileReader.close();
这个代码 (i = fileReader.read()) != -1
fileReader.read() 是一个字符一个字符的读,当不是文件末尾的时候,返回字符本身,当读到文件末尾的时候,返回-1
-
Buffered Reader 读取文件 常用
BufferedReader in = new BufferedReader(new FileReader("Path")); String line = in.readLine();
-
Scanner 来读取
//Scanner in = new Scanner(System.in); 键盘输入 Scanner in = new Sacnner(new FileReader("Path")); String line = in.nextLine();
这里我们可以看到 基本上我们使用的 类 BufferedReader等等他们都是以FileReader建立的,他们都体现了 装饰类 的思想,它与其他类配合使用。 过滤流
而我们 经常使用的方法 : readLine()、nextInt() 就在 这些装饰类中实现了-
Java IO package 相关类的关系
注意查看 我们经常使用的 过滤类
image.png
image.png -
File对象的使用
这里举的例子是File 对象是一个目录。File direct=new File(".");//创建代表当前目录的文件对象 String fileList[]=direct.list();//返回目录下的所有文件名和目录名 for(String name:fileList) System.out.println("name:"+name); //列出目录中的文件名和尺寸 for(int i=0;i<fileList.length;i++) { File currentFile=new File(fileList[i]); System.out.println(currentFile.getAbsolutePath()+" "+currentFile.length()+"字节"); }
-
这里另提一下,当我们要访问的文件用绝对路径的时候,直接写就行,“D:\...”,如果是本工程中的文件,“ . ”表示本工程所在的 位置,如下图,要访问package chapter9内的图片
image.png
in = new FileInputStream(".\\src\\chapter9\\lotus.jpg");