使用 FileOutputStream 创建文件
FileOutputStream 类属于字节流,以单个字节的形式存储数据。它可用于创建文本文件。文件表示将数据存储在第二个存储介质(如硬盘或 CD)上。文件是否可用或是否可以创建取决于底层平台。特别是某些平台,允许一次仅由一个 FileOutputStream(或其他文件写入对象)打开一个文件以进行写入。在这种情况下,如果涉及的文件已经打开,则此类中的构造函数将失败。
FileOutputStream 用于写入原始字节流,例如图像数据。对于写入字符流,请考虑使用 FileWriter。
重要方法:
- void close() :关闭此文件输出流并释放与此流关联的所有系统资源。
- protected void finalize() :清理与文件的连接,并确保在不再引用此流时调用此文件输出流的 close 方法。
- void write(byte[] b) :将指定字节数组中的 b.length 个字节写入此文件输出流。
- void write(byte[] b, int off, int len) :从偏移量 off 开始的指定字节数组中写入 len 个字节到此文件输出流。
- void write(int b) :将指定字节写入此文件输出流。
将按照以下步骤创建存储一些字符(或文本)的文本文件:
- 读取数据:首先要从键盘读取数据。为此,将键盘与某个输入流类相关联。使用 DataInputSream 类从键盘读取数据的代码如下:
DataInputStream dis =new DataInputStream(System.in);
这里 System.in 表示与 DataInputStream 对象链接的键盘
- 将数据发送到 OutputStream:现在,将要存储数据的文件关联到某个输出流。为此,请借助可以将数据发送到文件的 FileOutputStream。将 file.txt 附加到 FileOutputStream 可以这样完成:
FileOutputStream fout=new FileOutputStream(“file.txt”);
- 从 DataInputStream 读取数据:下一步是从 DataInputStream 读取数据并将其写入 FileOutputStream 。这意味着从dis对象读取数据并将其写入fout对象,如下所示:
ch=(char)dis.read(); fout.write(ch);
- 关闭文件:最后,任何文件都应在对其进行输入或输出操作后关闭,否则可能会损坏文件中的数据。关闭文件是通过关闭关联的流来完成的。例如, fout.close(): 将关闭 FileOutputStream ,因此无法将数据写入文件。
执行:
//Java program to demonstrate creating a text file using FileOutputStream
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class Create_File
{
public static void main(String[] args) throws IOException
{
//attach keyboard to DataInputStream
DataInputStream dis=new DataInputStream(System.in);
// attach file to FileOutputStream
FileOutputStream fout=new FileOutputStream("file.txt");
//attach FileOutputStream to BufferedOutputStream
BufferedOutputStream bout=new BufferedOutputStream(fout,1024);
System.out.println("Enter text (@ at the end):");
char ch;
//read characters from dis into ch. Then write them into bout.
//repeat this as long as the read character is not @
while((ch=(char)dis.read())!='@')
{
bout.write(ch);
}
//close the file
bout.close();
}
}
如果再次执行该程序,file.txt 的旧数据将丢失,任何最近的数据仅存储在该文件中。如果我们不想丢失文件的先前数据,只需将新数据附加到现有数据的末尾,这可以通过在文件名中写入 true 来完成。
FileOutputStream fout=new FileOutputStream(“file.txt”,true);
使用 BufferedOutputStream 提高效率
通常,每当我们使用 FileOutputStream 将数据写入文件时:
fout.write(ch);
在这里,调用 FileOutputStream 将字符写入文件。让我们估计一下从键盘读取 100 个字符并将它们全部写入文件所需的时间。
- 让我们假设使用 DataInputStream 将数据从键盘读入内存,将 1 个字符读入内存需要 1 秒,而 FileOutputStream 再花 1 秒将这个字符写入文件。
- 因此,读取和写入文件需要 200 秒。这是在浪费很多时间。另一方面,如果使用 Buffered 类,它们会提供一个缓冲区,该缓冲区首先填充来自缓冲区的字符,这些字符可以立即写入文件。缓冲类应与其他流类一起使用。
- 首先,DataInputStream 通过为每个字符花费 1 秒从键盘读取数据。该字符被写入缓冲区。因此,要将 100 个字符读入缓冲区,需要 100 秒时间。现在 FileOutputStream 将在一个步骤中写入整个缓冲区。因此,读取和写入 100 个字符只需要 101 秒。同理,阅读类用于提高阅读操作的速度。将 FileOutputStream 附加到 BufferedOutputStream 为:
BufferedOutputStream bout=new BufferedOutputStream(fout,1024);
这里,缓冲区大小被声明为 1024 字节。如果未指定缓冲区大小,则使用 512 字节的默认大小
BufferedOutputStream 类的重要方法:
- void flush() :刷新这个缓冲的输出流。
- void write(byte[] b, int off, int len) :从偏移量 off 开始的指定字节数组中写入 len 个字节到此缓冲输出流。
- void write(int b) :将指定字节写入此缓冲输出流。
输出:
C:\> javac Create_File.java
C:\> java Create_File
Enter text (@ at the end):
This is a program to create a file
@
C:/> type file.txt
This is a program to create a file
相关文章:
- 字符流与字节流
- Java中的文件类
- 使用 FileWriter 和 FileReader 在Java中处理文件