Java- Копировать файл в новый файл или существующий файл - PullRequest
5 голосов
/ 29 мая 2009

Я хотел бы написать копию функции (Файл f1, Файл f2) f1 всегда файл. f2 - это файл или каталог.

Если f2 - это каталог, я бы хотел скопировать f1 в этот каталог (имя файла должно остаться прежним).

Если f2 - файл, я хотел бы скопировать содержимое f1 в конец файла f2.

Так, например, если F2 имеет содержимое:

2222222222222

А F1 имеет содержание

1111111111111

И я копирую (f1, f2), тогда f2 должен стать

2222222222222

1111111111111

Спасибо!

Ответы [ 4 ]

17 голосов
/ 29 мая 2009

Apache Commons IO на помощь!

Расширение на пост Аллена:

  File f1 = new File(srFile);
  File f2 = new File(dtFile);

  InputStream in = new FileInputStream(f1);
  OutputStream out = new FileOutputStream(f2, true); // appending output stream

  try {
     IOUtils.copy(in, out);
  }
  finally {
      IOUtils.closeQuietly(in);
      IOUtils.closeQuietly(out);
  }

Использование Commons IO может упростить большую часть потоковой работы.

5 голосов
/ 29 мая 2009

Используя код из ответа Аллена Лоланда и расширяя его, это должно решить обе части вашего вопроса:

File f1 = new File(srFile);
File f2 = new File(dtFile);

// Determine if a new file should be created in the target directory,
// or if this is an existing file that should be appended to.
boolean append;
if (f2.isDirectory()) {
    f2 = new File(f2, f1.getName());
    // Do not append to the file. Create it in the directory, 
    // or overwrite if it exists in that directory.
    // Change this logic to suite your requirements.
    append = false;
} else {
    // The target is (likely) a file. Attempt to append to it.
    append = true;
}

InputStream in = null;
OutputStream out = null;
try {
    in = new FileInputStream(f1);
    out = new FileOutputStream(f2, append);

    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
} finally {
    if (out != null) {
        out.close();
    }
    if (in != null) {
        in.close();
    }
}
2 голосов
/ 29 мая 2009

FileOutputStream имеет конструктор, который позволяет указывать добавление, а не перезапись.

Вы можете использовать это для копирования содержимого f1 в конец f2, как показано ниже:

  File f1 = new File(srFile);
  File f2 = new File(dtFile);

  InputStream in = new FileInputStream(f1);
  OutputStream out = new FileOutputStream(f2, true);

  byte[] buf = new byte[1024];
  int len;
  while ((len = in.read(buf)) > 0){
    out.write(buf, 0, len);
  }
  in.close();
  out.close();
1 голос
/ 29 мая 2009

Проверьте ссылку ниже. это исходный файл, который копирует файл в другой с помощью NIO.

http://www.java2s.com/Code/Java/File-Input-Output/CopyafileusingNIO.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...