在Java中的流主要分为两种:字节流和字符流。
InputStream抽象类与OutputStream抽象类分别是字节输入流和字节输出流的基类。(操作单位byte)
1、使用字节流类FileInputStream读文本文件
![IO IO](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
例如:
FileInputStream fis = new FileInputStream(test.file);
int data; //用来接收读取到得数据
System.out.println("当前文本文档中可读取的字节数:"+fis.available());
//如果不循环只能读取到第一个字节的值
while((data=fis.read())!=-1){ //循环读取,条件读到文件的结尾
char c = (char)data;
System.out.print(c+" ");
}
//将字节文件内容转换成字符串,然后查看文件内容
fis.close(); //关闭流
2、使用FileOutputStream写文本文件
![IO IO](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
例如:
FileOutputStream fos = new FileOutputStream(file);
System.out.println("请输入文本内容,输入end结束");
Scanner input = new Scanner(System.in);
String text;
while (1 == 1) {
text = input.next();
byte[] text1 = text.getBytes(); // 将字符串转换成字节数组
if (text.equals("end")) { // 当用户输入end的时候跳出循环
break;
}
fos.write(text1);
}
fos.close();
Reader抽象类和Writer抽象类分别是字符输入流和字节输出流的基类。(操作单位char)
![IO IO](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
![IO IO](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
利用字符流类FileReader和BufferedReader读文本文件
1、FileReader类
FileReader类以字符为单位读取文本文件。
2、BufferedReader类
BufferedReader类可以从指定的文本文件以字符串为单位读取数据,它有一个带有默认长度的缓冲区,可以提高读取效率。
例如:
//用FileReader读取数据
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("G:\\homework.txt");
BufferedReader br = new BufferedReader(fr);
//读取文本中的第一行
String line = br.readLine();
while(line!=null){
System.out.println(line);
line=br.readLine();
}
br.close();
fr.close();
}
利用字符流类FileWriter和BufferedReader写文本文件
1、FileWriter类
FileWriter类以字符为单位向文本文件写入数据。
2、BufferedReader类
例如:
FileWriter fw = new FileWriter("G:\\homework.txt");
//BufferedWriter会覆盖原先文本中的原有内容
BufferedWriter bw = new BufferedWriter(fw);
bw.write("大家好~~");
bw.newLine(); //换行
bw.write("哈哈,我要修改内容了~~");
bw.newLine();
bw.write("哈哈,我修改完了~~");
//清空缓冲区
bw.flush();
bw.close();
fw.close();
二进制文件的读写
利用字节流DataInputStream读二进制文件
利用字节流类DataOutputStream写二进制文件
例如:
FileOutputStream fos = new FileOutputStream("G:\\S1.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(1);
dos.writeLong(2);
dos.writeChar('A');
dos.writeUTF("hello");
dos.close();
bos.close();
fos.close();
System.out.println("dsfhgdsfghiu完成文件写入erwhtgiutegsdtfg");
FileInputStream fis = new FileInputStream("G:\\S1.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
// 先进先出 ,否则就会乱码
System.out.println(dis.readInt());
System.out.println(dis.readLong());
System.out.println(dis.readChar());
System.out.println(dis.readUTF());
dis.close();
bis.close();
fis.close();
字节流和字符流的转换
1、InputStreamReader类
InputStreamReader类使用指定的字符集从字节输入流中读取字符。
2、OutputStreamWriter类
OutputStreamWriter类使用指定的字符集将字符以字节形式写入到字节输出流中。