JAVAIO-FileOutputStream

java.io.FileOutputStream是java.io.OutputStream的具体实现,提供连接到文件的输出流。

public class FileOutputStream extends OutputStream

类中实现了OutputStream的所有常用方法

public native void write(int b) throws IOException
public void write(byte[] data) throws IOException
public void write(byte[] data, int offset, int length) throws IOException
public native void close() throws IOException

跟之前的FileInputStream相同,FileOutputStream的四个方法也都是实际上的native方法。如下的三种构造器,区别在于文件是如何指定的:

public FileOutputStream(String filename) throws IOException
public FileOutputStream(File file) throws IOException
public FileOutputStream(FileDescriptor fd)

和FileInputStream不同的是,如果指定的文件不存在,那么FileOutputStream会创建它,如果文件存在,FileOutputStream会覆盖它。这个特性让我们使用的时候有些不太方便,有的时候,往往我们需要往一个文件里面添加一些数据,比如向日志文件里面存储记录。这时候,第四个构造函数就体现了它的作用

  public FileOutputStream(String name, boolean append) throws IOException

如果append设置为true,那么如果文件存在,FileOutputStream会向文件的末尾追加数据,而不是覆盖。
下面的程序获取两个文件名作为参数,然后把第一个文件复制到第二个文件:

public class FileCopier {
  public static void main(String[] args) {
    if(args!=2) {
      System.err.println("error input");//输入异常。
      return;
    }
    try {
      copy(args[0],args[1]);//调用复制文件的方法
    } catch (IOException e) {System.err.println(e);}
  }
  public static void copy (String inFile, String outFile) throws IOException {
    FileInputStream fin = null;
    FileOutputStream fout = null;
    try{
      fin = new FileInputStream(inFile);
      fout = new FileOutputStream(outFile);
      StreamCopier.copy(fin,fout);
    }
    finally {
      try {
        if (fin != null) fin.close();
      } catch (IOException e) {}
      try {
        if (fout != null) fout.close();
      } catch (IOException e) {}
  }
}
public class StreamCopier {
  public static void copy(InputStream in,OutputStream out) throws IOException {
    //Do not allow other threads read from the input or write the output
    synchronized (in) {
      synchronized (out) {
        byte[] buffer = new byte[256];
        while(true) {
          int bytesRead = in.read(buffer);
          if(bytesRead == -1) break;
          out.write(buffer,0,bytesRead);
}

你可能感兴趣的:(JAVAIO-FileOutputStream)