JAVA中的IO流的那些事 您所在的位置:网站首页 java中的reader JAVA中的IO流的那些事

JAVA中的IO流的那些事

2023-03-17 01:27| 来源: 网络整理| 查看: 265

JAVA中的IO流 一张图的事 FlieReader和FileWriter 以上大多都是字节输入流,下面是对字节输出流的操作; 综合应用----用字符输入流和输出流完成文件的复制 合并流---SequenceInputStream

一张图的事

JAVA中的IO流的那些事----FlieReader和FileWriter_其他很简单–输入输出流,输入输出的大小—字符和字节的区别。 下表内容看起来很多,但是基本操作是一样的。JAVA中的IO流的那些事----FlieReader和FileWriter_其他_02先一个一个的看–由于上一篇文章学习了File,接着学习FlieReader和FileWriter

FlieReader和FileWriter

FlieReader

import java.io.File; import java.io.FileReader; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { File file= new File("E:\\Hello.txt");//找到文件位置 FileReader fr= new FileReader(file);//创建字符输入流,将文件传进去开始读 int a=fr.read(); while(a!=-1){//文档结尾-- -1为结束标志 System.out.print((char)a); a=fr.read(); } fr.close(); } }

FileWriter

import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { File file= new File("E:\\Hello.txt");//找到文件位置 FileReader fr= new FileReader(file);//创建字符输入流,将文件传进去开始读 int a=fr.read(); while(a!=-1){ System.out.print((char)a); a=fr.read(); } fr.close(); File file1= new File("E:\\Hello.txt");//找到文件位置 FileWriter fw= new FileWriter(file1);//创建字符输出流,写入 fw.write("我爱你中国"); fw.close(); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_IO流_03FileReader中常用方法 read()方法—有四种,根据参数来一个个区分JAVA中的IO流的那些事----FlieReader和FileWriter_System_04read()–读取首个字符(其实也类似于有一个光标)

File f= new File("E:\\Hello.txt");//定位文件 FileReader fr= new FileReader(f);//读取文件 int read = fr.read(); int read1 = fr.read(); int read2 = fr.read(); int read3 = fr.read(); int read4 = fr.read(); int read5 = fr.read(); System.out.println(read); System.out.println(read1); System.out.println(read2); System.out.println(read3); System.out.println(read4); System.out.println(read5); fr.close();//关闭流

JAVA中的IO流的那些事----FlieReader和FileWriter_System_05

可以发现read是一个一个读取的,要想全部读取完毕,就要用到循环,同时也发现结尾是以 -1 而作为标记的,所以—

while(read!=-1){ System.out.print((char)read); read=fr.read(); }

JAVA中的IO流的那些事----FlieReader和FileWriter_java_06

## read(char []ch)

import java.io.File; import java.io.FileReader; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { File f = new File("E:\\Hello.txt");//定位文件 FileReader fr = new FileReader(f);//读取文件 char p[] = new char[5]; int read = fr.read(p);//每次读取的有效长度 /* while(read!=-1){ for(int i=0;i System.out.print(p[i]); } read = fr.read(p); } fr.close(); } }

以上这两种方式有什么区别呢?

JAVA中的IO流的那些事----FlieReader和FileWriter_IO流_07 read中传入char[]数组是,是以该数组长度为单位进行读取, read是取实际长度,如果是i File f = new File("E:\\Hello.txt");//定位文件 FileReader fr = new FileReader(f);//读取文件 char[]ch=new char[5]; int read = fr.read(CharBuffer.wrap(ch));//字节缓冲 System.out.println(read); while(read!=-1){ for(int i=0;i return wrap(array, 0, array.length); }

可以指定缓冲区的大小,也可以不指定,将所有字节数组的空间作为缓冲区

其他方法与对应的方法类似;

mark()方法— 将尝试将流重新定位到这一点。 并不是所有的 字符输入流支持mark()操作。 @param read AheadLimit可能的字符数限制 阅读时仍保留标记。 后 读了这么多字,试图 重置流可能会失败。 如果流不支持mark(), 或者发生其他I/O错误

import java.io.*; public class Test { public static void main(String[] args) throws IOException { File file= new File("D:\\Test\\Hello.txt"); FileReader fileReader= new FileReader(file); long start=System.currentTimeMillis(); int read=fileReader.read() ; while(read!=-1){ System.out.print((char)read); read=fileReader.read(); } fileReader.close(); long end=System.currentTimeMillis(); System.out.println(end-start); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_System_10

这时候也可以通过字节(数组)缓冲来完成,设置合理的缓冲大小,可以加快读取速度,设置过大占用内存就比较大,

import java.io.*; public class Test { public static void main(String[] args) throws IOException { File file= new File("D:\\Test\\Hello.txt"); FileReader fileReader= new FileReader(file); char []reads = new char[84]; long start=System.currentTimeMillis(); int read = fileReader.read(reads); for (int i = 0; i super(new FileInputStream(file)); }

FileReader(File file) 调用的是 FileInputStream(file)

以上大多都是字节输入流,下面是对字节输出流的操作; public class Test { public static void main(String[] args) throws IOException { File file = new File("D:\\Test\\Hello.txt"); FileWriter fw = new FileWriter(file,false); fw.write(101);//写入整形--char=e fw.write("我爱你中国");//写入字符串 String str = "亲爱的母亲"; char[] chars = str.toCharArray(); fw.write(chars);//写入字节数组 fw.write(str, 1, 2);//写入str的部分内容 fw.write(chars, 1, 3);//写入字节数组的部分内容 fw.close(); FileReader fr = new FileReader(file); int read = fr.read(); while (read != -1) { System.out.print((char)read); read=fr.read(); } fr.close(); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_其他_13 如果文件按不存在的话,会自己创建, 当我们再次添加内容的时候----

import java.io.*; public class Test { public static void main(String[] args) throws IOException { File file = new File("D:\\Test\\Hello.txt"); FileWriter fw = new FileWriter(file); fw.write("我为你流泪也为你自豪");//写入字符串 fw.close(); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_java_14

原来的内容被删除(覆盖)了,然或添加上新内容,原因竟然是----

JAVA中的IO流的那些事----FlieReader和FileWriter_其他_15

public FileWriter(File file, boolean append) throws IOException { super(new FileOutputStream(file, append)); }

综合应用----用字符输入流和输出流完成文件的复制

输入输出都有了,下面时完成文件的复制(还记得File文件的重命名操作吗?—完成文件(文件夹)的剪切操作)

一个一个字符写入,(速度慢)

import java.io.*; public class Test { public static void main(String[] args) throws IOException { File file = new File("D:\\Test\\Hello.txt");//找到文件 FileReader fd = new FileReader(file);//读取源文件 FileWriter fw = new FileWriter("D:\\Test\\Hello.doc");//要写入的文件 int read = fd.read(); while (read != -1) { fw.write((char) read); read = fd.read(); } fw.close();//关闭流--后用先关 fd.close(); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_java_16 做如下改动即可,

char[]a= new char[10]; int read = fd.read(a); while (read != -1) { fw.write(a,0,read); read = fd.read(a); }

当然还有其他方法,可以自己去逐渐实现;

小彩蛋—下篇文章预告—

package HuiXin; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { File file = new File("D:\\慧鑫教育\\知识点测试卷1.txt"); FileInputStream is = new FileInputStream(file); //byte v[] = new byte[3]; int n = is.read(); while (n != -1) { System.out.println(n); n = is.read(); } is.close(); } }

JAVA中的IO流的那些事----FlieReader和FileWriter_System_17 将字节转换为字符还需转换流,如果不用转换流转化,而直接强转为字符 会出现英文正常,中文乱码;

JAVA中的IO流的那些事----FlieReader和FileWriter_IO流_18

合并流—SequenceInputStream public static void Three() { File file = new File("d:" + File.separator + "hello.txt"); File file2 = new File("d:" + File.separator + "hellobak.txt"); File file3 = new File("d:" + File.separator + "hellobak3.txt"); FileInputStream fileInputStream = null; FileInputStream fileInputStream2 = null; FileOutputStream fileOutputStream = null; SequenceInputStream sequenceInputStream = null; byte b[] = new byte[64]; try { fileInputStream = new FileInputStream(file); fileInputStream2 = new FileInputStream(file2); fileOutputStream = new FileOutputStream(file3); sequenceInputStream = new SequenceInputStream(fileInputStream, fileInputStream2); int read = sequenceInputStream.read(b); while (read != -1) { fileOutputStream.write(b); read=sequenceInputStream.read(b); } } catch (IOException e) { e.printStackTrace(); } finally { try { fileOutputStream.close(); sequenceInputStream.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有