У меня есть два объекта Java.io.File file1 и file2. Я хочу скопировать содержимое из файла1 в файл2. Есть ли стандартный способ сделать это без меня, чтобы создать метод, который читает файл1 и записывать в файл2java IO для копирования одного файла в другой
ответ
Нет, для этого не существует встроенного метода. Наиболее близким к тому, что вы хотите достичь является transferFrom
метод из FileOutputStream
, например, так:
FileChannel src = new FileInputStream(file1).getChannel();
FileChannel dest = new FileOutputStream(file2).getChannel();
dest.transferFrom(src, 0, src.size());
И не забывайте обрабатывать исключения и закройте все в finally
блоке.
Whoah. Ты научил меня. –
Более полная (и правильная) версия этого ответа доступна здесь: http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java/115086#115086. Благодаря http://stackoverflow.com/users/92937/twentymiles для обучения всех нас. – vkraemer
Полные и эффективные Анны: https://gist.github.com/mrenouf/889747 –
Нет. У каждого давнего Java-программиста есть собственный пояс для удобства, который включает такой метод. Вот моя.
public static void copyFileToFile(final File src, final File dest) throws IOException
{
copyInputStreamToFile(new FileInputStream(src), dest);
dest.setLastModified(src.lastModified());
}
public static void copyInputStreamToFile(final InputStream in, final File dest)
throws IOException
{
copyInputStreamToOutputStream(in, new FileOutputStream(dest));
}
public static void copyInputStreamToOutputStream(final InputStream in,
final OutputStream out) throws IOException
{
try
{
try
{
final byte[] buffer = new byte[1024];
int n;
while ((n = in.read(buffer)) != -1)
out.write(buffer, 0, n);
}
finally
{
out.close();
}
}
finally
{
in.close();
}
}
Нет copyFileToInputStream? –
Это был * выдержка *. :) –
Если вы хотите быть ленивыми и уйти с написанием минимального использования кода FileUtils.copyFile(src, dest)
от Apache IOCommons
Это путь! –
Я поклонник минимального кода. Не знаю, почему «лениться» использовать служебный пакет. Я люблю StringUtils. –
Или использовать Files.copy(file1,file2) из библиотеки Гуавы Google.
С Java 7 вы можете использовать Files.copy()
из стандартной библиотеки Java.
Вы можете создать метод обертку:
public static void copy(String sourcePath, String destinationPath) throws IOException {
Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath));
}
, которые могут быть использованы следующим образом:
copy("source.txt", "dest.txt");
В Java 7 вы можете использовать Files.copy()
и очень важно: Do не забудьте закрыть OutputStream после создания нового файла.
OutputStream os = new FileOutputStream(targetFile);
Files.copy(Paths.get(sourceFile), os);
os.close();
См http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java – TwentyMiles