字节流
FileOutputStream——字节输出流
-
案例:
public static void main(String[] args){ // 1.创建一个字节输出流的对象 // 为了方便练习,我们直接创建到根目录下 // 创建一个字节输出流对象 OutputStream outputStream = new FileOutputStream("a.txt");// 覆盖,下一次写入的字符会覆盖本来的字符 OutputStream outputStream1 = new FileOutputStream("a.txt",true);// 不覆盖,下次写入字符会追加到后面 // 直接写成这种情况是会换行追加写的,但如果是把“大家好”注释掉就会覆盖 outputStream.write("大家好".getBytes(StandardCharsets.UTF_8)); outputStream.write("你好啊".getBytes(StandardCharsets.UTF_8)); // "\r\n"是换行的意思 outputStream1.write("富强,民主,文明,和谐;\r\n".getBytes(StandardCharsets.UTF_8)); outputStream1.write("自由,平等,公正,法制;\r\n".getBytes(StandardCharsets.UTF_8)); outputStream1.write("爱国,敬业,诚信,友善。".getBytes(StandardCharsets.UTF_8)); // 如果输入的是纯数字,那么显示的是ASCII码形式的数字 outputStream.write(97); // 要是想输入数字,那么简单的来说,就是把数字转成字符串就可以了 // 从下标零开始往后数到第三个三输入进去 outputStream.write("abcdefg".getBytes(StandardCharsets.UTF_8),0,3);// 输入“abc” // 最后记得要时刻关闭IO流 outputStream.close(); outputStream1.close(); }
FileInputStream——字节输入流
-
案例:
// 读文件的内容到内存,所以如果没有这个文件就会报错 public static void main(String[] args){ InputStream in = new FileInputStream("word.txt"); System.out.println(in.read());// 一次读取一个字节,输出-1就表示没有内容(读完了) byte[] bytes = new byte[1024]; in.read(bytes);// 将内容读取到传入的字节数组中 System.out.println(new String(bytes).length()); byte[] bytes = new byte[1024]; int len = 0; while((len = in.read(bytes)) != -1){ System.out.println(len); System.out.println("内容:"+new String(bytes, 0, len)); } in.close(); }
字符流
-
实例 输出:
// 创建一个字符输出流 一个中文汉字、字母、数字 都是字符 Writer fw = new FileWriter("b.txt"); // 可以不断向后添加内容 Writer fw = new FileWriter("b.txt",true); // 通过字符流向 b.txt 中写入内容 fw.write("大家好"); fw.write("你好啊!!".toCharArray(),0,3);// 从零开始长度为3写入 fw.write("今天天气不错".toCharArray()); fw.write(20013); fw.close();
-
实例 输入:
-
一字符流的形式读取硬盘文件的内容到内存
public static void main(String[] args) throws IOException{ Reader fr = new FileReader("word.txt"); System.out.println(fr.read()); // 20013 输出的字符对应的unicode编码 System.out.println(fr.read()); // -1 表示文件读取结束 char[] chars = new char[10]; System.out.println(fr.read(chars,0,10)); System.out.println(new String(chars,0,10)); char[] chars = new char[10]; int len = 0;// 每次循环读取到的字符长度存储到该变量上 while((len = fr.read(chars)) != -1){ // System.out.println(len); System.out.println(new String(chars,0,len)); } fr.close(); }
使用字符流、字节流复制文件
public static void main(String[] args) throws Exception{
// 字符文件可以轻松复制文本到其他文件夹中,但如果传入是视频或图片文件,那么会导致你的文件打不开
// 创建字符文件输入流
Reader fr = new FileReader("a.txt");
// 创建字符文件输出流
Writer wr = new FileWriter("E:/a.txt");
char[] ch = new char[10];
int len = 0;// 每次循环读取到的字符长度储存到该变量上
while ((len = fr.read(ch)) != -1){
wr.write(ch,0,len);
}
wr.close();
fr.close();
}
public static void main(String[] args) throws Exception{
// 字节流可以轻松复制图片和视频文件到其他文件夹中,但是用于传输文本文档内容可能会有乱码
// 创建一个读取文件的字节输入流
InputStream is = new FileInputStream("a.txt");
// 创建一个写入硬盘数据的字节输出流
OutputStream os = new FileOutputStream("D:/a.txt");
byte[] b = new byte[1024];
int len = 0;
while ((len = is.read(b)) != -1){
os.write(b,0,len);
}
os.close();
is.close();
}
所以我们一般用字符流来处理文本文件,用字节流来处理视频、图片等文件。