Java 使用FileOutputStream创建一个文件
FileOutputStream类属于字节流,以单个字节的形式存储数据。它可以用来创建文本文件。一个文件代表了在第二个存储介质上的数据存储,如硬盘或CD。文件是否可用或可被创建,取决于底层平台。特别是一些平台,允许一个文件一次只能由一个FileOutputStream(或其他文件写入对象)打开写入。在这种情况下,如果所涉及的文件已经被打开,这个类的构造函数将失败。
FileOutputStream是用来写原始字节流的,如图像数据。对于写字符流,可以考虑使用FileWriter。
重要的方法
- void close() : 关闭这个文件输出流并释放与这个流相关的任何系统资源。
- protected void finalize() : 清理与文件的连接,并确保当不再有对这个流的引用时,这个文件输出流的关闭方法被调用。
- void write(byte[] b) : 将指定字节数组中的b.length字节写入这个文件输出流。
- void write(byte[] b, int off, int len) : 从指定的字节数组中,从偏移量off开始,写出len字节到这个文件输出流。
- void write(int b) : 将指定的字节写到这个文件输出流中。
要创建一个存储一些字符(或文本)的文本文件,需要遵循以下步骤 。
- Reading data: 首先,应该从键盘上读取数据。为了这个目的,将键盘与一些输入流类联系起来。使用DataInputSream类从键盘上读取数据的代码如下。
Here System.in represent the keyboard which is linked with DataInputStream object
- Send data to OutputStream: 现在,将一个要存储数据的文件与一些输出流联系起来。为此,在FileOutputStream的帮助下,可以将数据发送到文件中。将file.txt附加到FileOutputStream可以这样做。
- Reading data from DataInputStream: 下一步是从DataInputStream中读取数据并将其写入FileOutputStream中。这意味着从dis对象中读取数据并将其写入fout对象中,如图所示。
- Close the file: 最后,在对任何文件进行输入或输出操作后,应将其关闭,否则该文件的数据可能被破坏。关闭文件是通过关闭相关的流来完成的。例如,fout.close(): 将关闭FileOutputStream,因此没有办法向该文件写入数据。
实现
如果程序再次被执行,file.txt的旧数据将被丢失,而任何最近的数据只被保存在文件中。如果我们不想丢失文件中以前的数据,而只是将新的数据附加到已有数据的末尾,这可以通过在文件名旁写上 “true “来实现。
使用BufferedOutputStream提高效率
通常情况下,每当我们使用FileOutputStream将数据写到一个文件中时,作为。
这里,FileOutputStream被调用来将字符写入文件。让我们估计一下从键盘上读取100个字符并将其全部写入文件所需的时间。
- 让我们假设用DataInputStream将数据从键盘读到内存中,用1秒时间将1个字符读到内存中,用FileOutputStream将这个字符写到文件中,再花1秒。
- 所以读写一个文件需要200秒。这就浪费了很多时间。另一方面,如果使用Buffered类,它们会提供一个缓冲区,首先将缓冲区中的字符填满,然后就可以立即写入文件。缓冲类应与其他流类连接使用。
- 首先,DataInputStream从键盘上读取数据,每个字符花费1秒。这个字符被写进缓冲区。因此,要读100个字符到缓冲区,需要100秒的时间。现在FileOutputStream将在一个步骤中写入整个缓冲区。所以,读和写100个字符只需要101秒。以同样的方式,阅读类被用来提高阅读操作的速度。将FileOutputStream附加到BufferedOutputStream上,就像。
这里,缓冲区的大小被声明为1024字节。如果没有指定缓冲区的大小,那么将使用默认的512字节。
BufferedOutputStream类的重要方法 。
- void flush() : 冲洗这个缓冲输出流。
- void write(byte[] b, int off, int len) : 从偏移量off开始,从指定的字节数组中写入len字节到这个缓冲输出流。
- void write(int b) : 将指定的字节写到这个缓冲输出流中。
输出