package com.IO.demo;
import java.io.FileReader;
import java.io.IOException;
public class Demo04 {
public static void main(String[] args) throws IOException {
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("D:/demoIO.txt");
// 调用读取流对象的read方法
// read(),一次读一个字符,而且会自动往下读。
// int ch1 = fr.read();
// System.out.print((char)ch1);
//
// int ch2 = fr.read();
// System.out.print(" " + (char)ch2); fr.read();返回的是int型的ASCLL码
//
// int ch3 = fr.read();
// System.out.print(" " + (char)ch3);
//
// int ch4 = fr.read();
// System.out.print(" " + (char)ch4);
//
// int ch5 = fr.read();
// System.out.print(" " + (char)ch5);
//
// int ch6 = fr.read();
// System.out.print(" " + (char)ch6);
//
// int ch7 = fr.read();
// System.out.print(" " + (char)ch7);
//
// int ch8 = fr.read();
// System.out.print(" " + (char)ch8);
//
// int ch9 = fr.read();
// System.out.print(" " + ch9); //此处已经没有字符了,输出int型字符“-1”
// while(true){
// int ch = fr.read();
// if(ch == -1){ //没有字符时候==-1,-1是结束标记
// break;
// }
// System.out.println("ch=" + (char)ch);
// }
int ch = 0;
while((ch = fr.read()) != -1){
System.out.println((char)ch);
}
}
}
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
package com.IO.demo;
import java.io.FileReader;
import java.io.IOException;
/**
* 第二种方式:通过字符数组进行读取
* @author Administrator
*
*/
public class Demo05 {
public static void main(String[] args) throws IOException {
//电脑上D盘的demoIO.txt内容是"abcDefGh"
FileReader fr = new FileReader("D:/demoIO.txt");
//定义一个字符数组,用于存储读到的字符。
//该read(char[])返回的是读到字符个数。
char[] buf = new char[3];
/**
* 因为数组的长度为3,所以每次读取流中的3个字符
* 当3个字符读取完之后,读下面3个字符的时候,
* 下面3个字符会依次替代掉上一次读取的3个字符
* 当最后一批没有3个字符的时候,流根据数组长度,
* 依旧会读取3个字符,假设只剩1个字符的时候,
* 该字符会替代掉数组中上一次读取的3个字符中的第1个字符,
* 因为只剩下1个字符用来读取了,此时的数组长度为1,
* 但是上次读取的3个字符后,后面两个位置上的字符还是上次遗留的字符,
* 没有字符将其位置替代,所以虽然此时数组的长度为1了,但是数组总共
* 3个长度,剩余的2个长度上遗留着上次读过的字符,也一样在这次会被
* 读取出来。当流中的字符全部都被读取完了,数组长度返回值为-1,
* 但是同样的道理,虽然没有返回数组长度了,但是数组的长度依旧为3,
* 上次读取后的3个字符依旧留在数组中,所以读取数组的话,依旧会读出上一次
* 的数组值。
*/
//abc,3
int num1 = fr.read(buf);
System.out.println("num1=" + num1 + "..." + new String(buf));
//Def,3
int num2 = fr.read(buf);
System.out.println("num2=" + num2 + "..." + new String(buf));
//Ghf,2
int num3 = fr.read(buf);
System.out.println("num3=" + num3 + "..." + new String(buf));
//Ghf,-1
int num4 = fr.read(buf);
System.out.println("num4=" + num4 + "..." + new String(buf));
// int num = 0;
// while((num=fr.read(buf)) != -1){
// System.out.println(new String(buf,0,num)); //String方法,从0位置开始,取num个字符。
// }
fr.close();
}
}
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
练习:
package com.IO.demo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
//练习:读取一个.java文件,并打印在控制台上。
public class Prc01 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:/demoIO.txt");
char[] buf = new char[1024];
int num = 0;
while((num = fr.read(buf)) != -1){
System.out.println(new String(buf,0,num));
}
}
}