java 文件读写流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 文件读写流相关的知识,希望对你有一定的参考价值。

流中为什么还得套用流?
具体的流是怎么套用的?
文件读写流的方法以及应用?
最后请给一个实例解析!
谢谢了!

首先你要知道java的io流主要分两种,一种是字符流,另一种字节流,还有一种过滤流,这个不常用,暂且可以忽略。
等你这些都掌握了,推荐你用nio包中的管道流。
流的套用可以提升读写效率(这种方式只能是同类流的套用,比如字节流套用字节流),还有一种是字符流与字节流互相转换,转换通过一种叫做“桥转换”的类,比如OutputStreamWriter类。

下面举个最基础的字节流例子:

public void copyFile(String file, String bak)
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
byte[] bytes = new byte[1024];
bis = new BufferedInputStream(new FileInputStream(file));//BufferedInputStream会构造一个背部缓冲区数组,将FileInputStream中的数据存放在缓冲区中,提升了读取的性能
bos = new BufferedOutputStream(new FileOutputStream(bak));//同理
int length = bis.read(bytes);
while (length != -1)
System.out.println("length: " + length);
bos.write(bytes, 0, length);
length = bis.read(bytes);

catch (Exception e)
e.printStackTrace();
finally
try
bis.close();
bos.close();
catch (IOException ex)
ex.printStackTrace();




字符流的用法:
FileReader fr = new FileReader("D:\\test.txt");
BufferedReader br = new BufferedReader(fr);
或者PrintWriter pw = new PrintWriter(new FileWriter("D:\\test.txt"));
...
参考技术A 读写是两个不同的分支,通常都是分开单独使用的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环

System.out.println(str);//原样输出读到的内容

备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
参考技术B 不明白你的流中套用流指什么
如果是BufferedReader reader = new BufferReader(new InputStreamReader(new FileInputStream("xx.txt")));这种疑惑,我可以解答你,你看到的BufferedReader和InputstreamReader都是一些“装饰”,方便我们更有效操作最终的文件流。FileInputStream 可以直接读文件,但是只能按自己读,用一个reader之后可以按字符读文件,BufferedReader是对内部的reader做一个缓冲(buffer)提高读写效率
参考技术C 供参考:
public class test
public static void main(String[] args)
File fileIn = new File("E:/text.txt");
File fileOut = new File("D:/text.txt");
try
//文件输出流
FileInputStream fi = new FileInputStream(fileIn);
//文件输入流
FileOutputStream out = new FileOutputStream(fileOut);
byte[] b = new byte[1024*1024];
System.out.println("开始读写...");
while(true)
int len = fi.read(b,0,b.length);
if(len >= 0)
out.write(b, 0, len);
else
System.out.println("读写完毕!");
break;


catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();


参考技术D 同样期待

java中怎么用io流读写文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test14 
    public static void main(String[] args) throws IOException 
        String fPath = "C:/test.txt";
        // 读
        BufferedReader br = new BufferedReader(new FileReader(fPath));
        System.out.println(br.readLine());
        br.close();// // 使用后记得关闭
        // 写
        BufferedWriter bw = new BufferedWriter(new FileWriter(fPath));
        bw.write("写一段话到文件里");
        bw.flush();
        bw.close();// 使用后记得关闭
    

参考技术A 可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到读取的内容。
BufferedReader bre = null;
try
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环

System.out.println(str);//原样输出读到的内容

备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。

以上是关于java 文件读写流的主要内容,如果未能解决你的问题,请参考以下文章

Java 字符流读写文件

java 中简述使用流进行读写文本文件的步骤?

如何使用Java API读写HDFS

java中怎么用io流读写文件

Java 读写文件

java文件读写