java中I/O初学习。流是一个抽象的概念,当java程序需要从数据源读取数据是,会开启一个到数据源的流。
流可以分为字节流和字符流,使用中要注意使用前要导包,使用的过程中要进行异常处理,使用后要关闭资源。
字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数据时会把数据按照JVM的默认编码自动转换成字符。
对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。所有的字符流操作类都继承自Reader或者Writer这两个抽象类。
学习代码:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("Test.txt");
//char c =(char)(fr.read());
/*int c;
while((c=fr.read())!= -1)
System.out.print((char)c);//读取信息
*/
//fr.read();//返回的是int类型的数字,读取到的一个字符的码表值(只要不到末尾就不是-1)
while(fr.read()!= -1 )
System.out.print((char)(fr.read()));
fr.close();//3. 使用后要释放资源
}
}
while((c=fr.read())!= -1)
System.out.print((char)c);
与
int c;
while((c=fr.read())!= -1)
System.out.print((char)c);
两种方式打印出来的结果会有区别,主要原因在于
上边的代码调用了两次fr.read()方法,所以读出来的文字是间隔着的,因为读取文件是有一个游标的过程(这个和Iterator差不多)。