IO流主要用于传输数据,按照数据种类,分为字节流和字符流:
- 字节流:可以处理任意一种数据;
- 字符流:只能处理纯文本数据(char类型,文字,没有颜色、声音等,凡是用默认记事本可以打开的)。(其实其底层也是字节)
1.写文件FileWriter
如果希望将数据写到纯文本文档中,可以使用FileWriter类。
1.1使用方法
1.导包
import java.io.FileWriter;
2.创建,构造方法
public FileWriter(String fileName);
FileWriter fw = new FileWriter("file01.txt");
注意:文件扩展名只能决定默认用什么软件打开文件,不能决定其内容。
3.使用,成员方法
写数据:public void write(String str):需要写到文件中的字符串
关闭流:public void close();关闭流,释放相关资源。
public FileWriter(String fileName,boolean append)://第二个参数如果是true,则追加内容到文件fileName中
换行效果:
- 换行其实也是一种字符,叫做换行符
- Windows中换行符是:\r\n 两个字符
- macOS当中是:\n
- Linux中是:\n
public class DemoFileWriter {
public static void main(String []args) throws IOException{
///构造打开
FileWriter fw = new FileWriter("feng.txt");
///写数据
fw.write("BUAA");
fw.write("fengqiangguo");
///换行符(Windows换行符:\r\n)
fw.write("\r\nJungle");
///关闭
fw.close();
}
}
1.2write的5种重载
- public void write(int ch):参数是单个文字对应的数字(对应ASCII或者unicode表);
- public void write(String str):写字符串
- public void write(String str, int offset, int count):写字符串中的一部分内容
- public void write(char[] array):写一个完整的字符数组;
- public void wirte(char[] array, int offset,int count):写字符数组中的一部分内容;
public class FileWriteOverload {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//写单个字符
FileWriter fw = new FileWriter("file01.txt");
fw.write(65);//A
fw.write(48);//0
fw.write(97);//a
//写完整的字符串
fw.write("Hello world");
//写字符串的一部分
String str = "Jungle是一个用Qt的工业机器人";
fw.write(str,7,11);//一个用Qt的工业机器人
//写一个完整的字符数学组
char[] array = {'J','U','N','G','L','E'};
fw.write(array);
fw.close();
}
}
2.读文件FileReader
FileReader用来将文本文件中的字符读取到程序中
1.导包:
import java.io.FileReader;
2.创建,构造方法:public FileReader(String fileName);
FileReader fr = new FileReader("fielname.txt");
3.读取,成员方法
读取单个字符:public int read():读取下一个字符,得到对应的ASCII或Unicode值;
当文件中没有更多字符时,读出的值是-1
关闭流,释放资源:public void close();
读取字符数组
public int read(char[] buf):一次读取整个字符数组的数据
参数是一个字符数组,用来承载多个字符
返回值:代表的是读取到的数组中的有效个数
public class DemoFileReader {
public static void main(String[] args) throws IOException {
//不存在的文件不能读
//FileReader fr = new FileReader("noExist.txt");
FileReader fr = new FileReader("feng.txt");
int num = fr.read();
System.out.println(num);
num = fr.read();
System.out.println(num);
fr.close();
}
}
例:完整读取文本文件中的字符
FileReader fr = new FileReader("feng.txt");
//当文件中没有更多字符时,读出的值是-1
int num;
while((num = fr.read())!=-1) {
System.out.println((char)num);//通过类型转换翻译为文字
}
例:使用字符数组读取
FileReader fr = new FileReader("feng.txt");
int num;
char[] array = new char[5];//一次读取5个字符
num = fr.read(array);
System.out.println(num);
// 使用字符数组中的有效部分来创建字符串
String str = new String(array,0,num);
System.out.println("len = "+str);
fr.close();
例:完整读取文本文件
public class DemoFileReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("feng.txt");
int num;
char[] array = new char[10];//一次读取10个字符
//读取文件的方法
while((num = fr.read(array))!=-1) {
String string = new String(array,0,num);
System.out.println(string);
}
fr.close();
}
}