目前所在的项目组,要读取系统运行的日志信息,涉及到log文件的读取和写入,可以实现文件的上传下载。在做这些的时候,就用到了Java I/O流。
FileInputstream : 处理文件类型,继承了Inputstream,
主要两个构造函数:
1. public FileInputstream (String name);
//文件路路径
2. public FileInputstream (File file);
//
直接文件类型
FileInputstream类的主要方法:
Read();
read(byte[] b);
read(byte[] b int off, int len)
available();
skip(); //从指定的位置开始
FileInputstream 类是以二进制输入/输出,I/O速度快且效率高,但是它的read()方法读到的是一个字节,不利于阅读。
按字节流文本内容读出:
File log = new File ( logPath); FileInputStream fileInputStream = new FileInputStream(log);
bytes = new byte[1024]; if ((fileInputStream.read(bytes)) != -1) { jsonArray.add(new String(bytes)); }FileInputStream 调用read方法可以按字节大小一次读取多少个字节。这里一次读取1024个字节。存储在bytes中,这个是byte类型,需要强转为String类型。这样可以得到文本内容。
按字符流文本内容读出:当中使用到了处理字符串的抽象类:InputStreamReader。
InputStreamReader:
作用: 是字节流通向字符流的桥梁,它将字节流转换为字符流,继承了Reafder。
InputStreamReader reader = new InputStreamReader( new FileInputStream(file),"utf-8"); BufferedReader bufferedReader = new BufferedReader(reader); String line = bufferedReader.readLine();
将文件转化为字符流读出,然后使用BufferedReader读出每行数据,读出的数据是按照utf-8编码,不会出现字符乱码。
代码中变量 line就是文本文件中的一行数据。将bufferedReader.readLine() !=null作为循环条件,可以将文本文件里的内容全都出来。
outputStreamwriter
: 字节流通向字符流的桥梁
作用:
字节输出流换成字符输出流,继承了writer。
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); BufferedWriter writer = new BufferedWriter(write); writer.write("我是一名Java工程师");
将”我是一名Java工程师“写入文本文件中。
warn:
Filewriter : 不是Writer的子类,而是outputStreamWriter的子类。
FileReader : 不是Reader的子类,而是InputStreamReader的子类。