java IO 流(二)写文件和读文件

本文详细介绍了如何使用Java进行文本和二进制文件的读写操作,包括使用FileWriter、BufferedWriter进行文本文件的写入,使用BufferedReader进行文本文件的读取,以及使用DataOutputStream和DataInputStream进行二进制文件的读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如:写文本文件,在D盘目录创建文本文件Hello.txt,并往里写入若干行文本。

importjava.io.*;

/*

 * 写入到D盘一个文本文件,并往里写入若干行文字。

 *如果该次磁盘下有重复的内容,则删除重复的内容后再写入一个新的内容。

 */

publicclass TestWriteText

{

publicstatic void main(String[] args)

{

//main方法中声明抛出IO异常。

//定义写入路径的字符串。

String fileName ="D:\\Hello.txt";

try

{

//使用面向字符流的FileWriter类。

//直接调用构造方法,传递写入路径。FileWriter类的构造方法有五个。

FileWriterwriter = new FileWriter(fileName);

//FileWriter类的Write()方法向文件中写入字符。

writer.write("Hello!\n");

writer.write("Thisis my first text file,\n");

writer.write("I'mvery happy!\n");

writer.write("EveryDay is a new Day!\n");

writer.write("我爱我家!");

//清空流里的内容并关闭它,如果不调用该方法还没有完成所有数据的写操作,程序就结束了。

writer.close();

}

 

catch(IOException iox)

{

System.out.println("Problemwriting" + fileName);

}

 

 

 

}

}

 

   

如果我们调用这个构造方法的话:FileWriter(fileName,true);则不允许重复,如果在D:盘中存在这个文件则不允许重复。

使用面向字符流的对象FileWrite

我们可以看到Hello.txt是一个普通的ASCII码文本文件,每个英文字符占一个字节,中文字符占两个字节。

 

java程序中的字符串则是每个字符占用两个字节,采用Unicode编码。

 

 

 

如果要写入的内容更多,就应该用高效的缓冲流类:BufferedWriter.

FileWriter不同是多个了newLine()方法用于换行。

 

我们使用BufferedWriter完成Hello.txt的内容。

importjava.io.*;

/*

 * 写入到D盘一个文本文件,并往里写入若干行文字。

 *使用BufferedWriter会更高效,可以换行。

 */

publicclass TestBufferedWriter

{

publicstatic void main(String[] args)

{

//main方法中声明抛出IO异常。

//定义写入路径的字符串。

String fileName ="D:\\NewHello.txt";

try

{

//使用面向字符流的BufferedWriter类。

//相当于在FileWriter类上再套上一层管道。

BufferedWriterout = new BufferedWriter(new FileWriter(fileName));

//FileWriter类的Write()方法向文件中写入字符。

out.write("NewHello!\n");

out.newLine();

out.write("Thisis BufferWriter范例,\n");

out.newLine();

out.write("keepalone\n");

out.newLine();

out.write("lovelife\n");

 

//清空流里的内容并关闭它,如果不调用该方法还没有完成所有数据的写操作,程序就结束了。

out.close();

}

 

catch(IOException iox)

{

System.out.println("Problemwriting" + fileName);

}

 

 

 

}

}

 

读文本文件。

Reader

FileReader

BufferedReaderreadLine();

 

Hello.txt中读取文本并显示在屏幕上。

importjava.io.*;

/*

 * D盘的Hello.txt 中读出文件中的数据到命令行中。

 *

 */

publicclass TestBufferedReader

{

publicstatic void main(String[] args)

{

//main方法中声明抛出IO异常。

//定义写入路径的字符串。

String fileName ="D:\\Hello.txt";

String line;

try

{

// 利用BufferedReader套在FileReader,处理流套在节点流上。

BufferedReaderin = new BufferedReader(new FileReader(fileName));

//首先读取一行的内容。

line = in.readLine();

//判断读写的内容是否为空。

while(line!=null)

{

//输出一行。

System.out.println(line);

//继续读出下一行的内容。

line = in.readLine();

}

//关闭这个管道

in.close();

}

 

catch(IOException iox)

{

System.out.println("Problemreading" + fileName);

}

 

 

 

}

}

显示如下:

    

文件的复制(略)

写二进制文件。

什么是二进制文件?

原则上,所有文件都是由8位的字节组成的,如果文件字节中的内容应被解释为字符,则文件被称为文本文件;如果解释为其他的含义,则文件被称为二进制文件。

 

在文字处理程序中,如果字处理软件Word产生的doc文件中,数据要被解释为字体、格式、图像和其他费字符信息。因此,这样的文件时二进制文件不用Reader流正确读取。

好处:

输入输出更快。

比文本文件小很多。

有些数据不容易被表示为字符。

OutputStream

FileOutputStream

DataOutputStream

 

将三个int类型的数字写入数据文件data.dat.

 

importjava.io.*;

/*

 * 字节流写二进制文件。将三个int类型255 0 -1写入数据文件data.dat中。

 *

 

 */

publicclass TestDataOutputStream

{

publicstatic void main(String[] args)

{

//main方法中声明抛出IO异常。

//定义写入路径的字符串。

String fileName ="D:/data.txt";

//定义三个变量。

intvalue0 = 255;

intvalue1 = 0;

intvalue2 = -1;

 

try

{        

    //定义处理流和结点流。

DataOutputStreamout = new DataOutputStream(new FileOutputStream(fileName));

 

out.writeInt(value0);

out.writeInt(value1);

out.writeInt(value2);

out.close();

 

 

}

 

catch(IOException iox)

{

System.out.println("problemwriting" + fileName);

}

 

 

 

}

}

我们会看到写入到dat文件二进制内容。

利用BufferedOutputStream 写二进制文件的缓冲流类,对于写入大量的数据,可提高效率。

 

如果是写入各种类型的数据,我们可以参考javaAPI文档来确定写入哪些数据。

 

读二进制文件。

创建的数数据文件中的3int型数字,显示相加的结果。

importjava.io.*;

/*

 * 字节流写二进制文件。将三个int类型255 0 -1写入数据文件data.dat中。

 *

 

 */

publicclass TestDataInputStream

{

publicstatic void main(String[] args)

{

//main方法中声明抛出IO异常。

//定义写入路径的字符串。

String fileName ="D:\\data.dat";

intsum = 0;

        try {

          DataInputStream instr= new DataInputStream(

           new BufferedInputStream(newFileInputStream( fileName)));

          sum += instr.readInt();

           sum += instr.readInt(); 

           sum += instr.readInt();

           System.out.println( "The sum is: " + sum );

           instr.close();

        }

              catch ( IOException iox ) {

                   System.out.println("Problem reading " + fileName);

}

 

 

         }

 

 

}

 

当我们不知道是三个数据的时候,多读的话就会抛出EOFException异常,所以我们将读操作放在try中。

 

我们可以使用嵌套的trycatch块来对异常进行进一步的处理。

 

过滤流:

读或写同时对数据进行处理

通过另外一个流来构造一个过滤流

 

大部分提供的是FilterInputStreamFilterOutputStream的子类。

 

 

对于文件类FileFile的构造方法和常用方法,处理压缩文件 java.util.zip包,对象序列化,RandomAccessFile随机文件的创建和访问,我们都可以自行查阅API文档来解决问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值