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

importjava.io.*;
/*
 * 写入到D盘一个文本文件,并往里写入若干行文字。
 *如果该次磁盘下有重复的内容,则删除重复的内容后再写入一个新的内容。
 */
publicclass TestWriteText
{
publicstatic void main(String[] args)
{
//在main方法中声明抛出IO异常。
//定义写入路径的字符串。
String fileName
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(IOExceptioniox)
{
System.out.println("Problemwriting" + fileName);
}
 
 
 
}
}

 

   

java 写文件 实时 java io写文件_java 写文件 实时

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

使用面向字符流的对象FileWrite类

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

 

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


java 写文件 实时 java io写文件_java 写文件 实时_02

 

 

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

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

 

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

importjava.io.*;
/*
 * 写入到D盘一个文本文件,并往里写入若干行文字。
 *使用BufferedWriter会更高效,可以换行。
 */
publicclass TestBufferedWriter
{
publicstatic void main(String[] args)
{
//在main方法中声明抛出IO异常。
//定义写入路径的字符串。
String fileName
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(IOExceptioniox)
{
System.out.println("Problemwriting" + fileName);
}
 
 
 
}
}

java 写文件 实时 java io写文件_java 写文件 实时_03

 

读文本文件。

Reader
FileReader
BufferedReader和readLine();

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

importjava.io.*;
/*
 * 从D盘的Hello.txt 中读出文件中的数据到命令行中。
 *
 */
publicclass TestBufferedReader
{
publicstatic void main(String[] args)
{
//在main方法中声明抛出IO异常。
//定义写入路径的字符串。
String fileName
String line;
try
{
// 利用BufferedReader套在FileReader,处理流套在节点流上。
BufferedReaderin = new BufferedReader(new FileReader(fileName));
//首先读取一行的内容。
linein.readLine();
//判断读写的内容是否为空。
while(line!=null)
{
//输出一行。
System.out.println(line);
//继续读出下一行的内容。
linein.readLine();
}
//关闭这个“管道”。
in.close();
}
 
catch(IOExceptioniox)
{
System.out.println("Problemreading" + fileName);
}
 
 
 
}
}

显示如下:

    

java 写文件 实时 java io写文件_数据_04

文件的复制(略)

写二进制文件。

什么是二进制文件?

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

 

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

好处:

输入输出更快。

比文本文件小很多。

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

OutputStream
FileOutputStream
DataOutputStream

 

java 写文件 实时 java io写文件_数据_05

java 写文件 实时 java io写文件_二进制文件_06

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

importjava.io.*;
/*
 * 用字节流写二进制文件。将三个int类型255 0 -1写入数据文件data.dat中。
 *
 
 */
publicclass TestDataOutputStream
{
publicstatic void main(String[] args)
{
//在main方法中声明抛出IO异常。
//定义写入路径的字符串。
String fileName
//定义三个变量。
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(IOExceptioniox)
{
System.out.println("problemwriting" + fileName);
}
 
 
 
}
}

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

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

java 写文件 实时 java io写文件_二进制文件_07

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


java 写文件 实时 java io写文件_二进制文件_08

读二进制文件。

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

importjava.io.*;
/*
 * 用字节流写二进制文件。将三个int类型255 0 -1写入数据文件data.dat中。
 *
 
 */
publicclass TestDataInputStream
{
publicstatic void main(String[] args)
{
//在main方法中声明抛出IO异常。
//定义写入路径的字符串。
String fileName
intsum = 0;
        try
          DataInputStream instr= new DataInputStream(
           new BufferedInputStream(newFileInputStream( fileName)));
          sum += instr.readInt();
           sum += instr.readInt();  
           sum += instr.readInt();
           System.out.println(
           instr.close();
        }
              catch ( IOException iox
                   System.out.println("Problem reading " + fileName);
}
 
 
 
 
 
}

java 写文件 实时 java io写文件_文本文件_09

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

 

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


java 写文件 实时 java io写文件_数据_10

过滤流:

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

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

 

大部分提供的是FilterInputStream和FilterOutputStream的子类。

 

 

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