IO第五回:访问文件的字节输出流—FileOutputStream
标签: IO流
FileOutputStream简介
public class FileOutputStream extends OutputStream
FileOutputStream 是文件输出流,它继承于OutputStream。通常,我们使用FileOutputStream将输出字节写入File中文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。
FileOutputStream的步骤
- 生成文件流对象FileOutputStream类;
- 调用FileOutputStream类中的功能函数如write(int b)等读写文件内容;
- 关闭文件(close())。
API简单分析
构造方法摘要
FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。若文件不存在,则创建。
如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开,则抛出 FileNotFoundException。FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数append为 true,则将字节写入文件末尾处,而不是写入文件开始处FileOutputStream(FileDescriptor fdObj)
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数append为 true,则将字节写入文件末尾处,而不是写入文件开始处
方法摘要
void close()
关闭此文件输出流并释放与此流有关的所有系统资源。protected void finalize()
清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。FileChannel getChannel()
返回与此文件输出流有关的唯一FileChannel 对象。FileDescriptor getFD()
返回与此流有关的文件描述符。表示到文件系统中的某个文件的连接的 FileDescriptor 对象,该文件系统正被此 FileOutputStream 对象使用。void write(byte[] b)
将 b.length 个字节从指定byte数组写入此文件输出流中。void write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。void write(int b)
将指定字节写入此文件输出流。实现 OutputStream 的 write 方法。 参数int b 为要写入的字节。
代码演示精讲
创建一个File对象,表明要写入的文件的位置(形参),若输出的物理文件不存在,则新建一个,若存在则覆盖。
创建一个FileOutputSteam的对象,将File对象作为形参传递给构造器,若构造器有append参数为true,则接下来继续写入则会连接到文件的尾部
- 写入的操作
- 关闭输出流
向一个文件中写入数据
package charIO;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by japson on 8/19/2017.
*/
public class testOutputSteam {
public static void main(String[] args) {
//创建一个File对象,表明要写入的文件的位置(形参)
//若输出的物理文件不存在,则新建一个,若存在,则覆盖。
File file = new File("test1");
FileOutputStream fos = null;
try {
//创建一个FileOutputSteam的对象,将File对象作为形参传递给构造器
fos = new FileOutputStream(file);
//在write()参数中中写要写入的字节(字符串转字节)
fos.write(new String("I am Japson.").getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
复制一个文件
复制一个文件,也就是将一个文件中的内容写入另一个文件:
package charIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by japson on 8/19/2017.
*/
public class Copy {
public static void main(String[] args) {
File fin = new File("test1.txt");
File fout = new File("test_copy.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("test1.txt");
fos = new FileOutputStream("test_copy.txt");
byte[] b = new byte[5];
int len = 0;
//这里要注意!!!
while ((len = fis.read(b)) != -1) {
fos.write(b,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}