Как скопировать файл в java
Im пытается скопировать файл в java и переместить его в новую папку. Это код, который я использовал HAve, но я всегда получаю эту ошибку "(доступ запрещен) в указанном каталоге". Есть ли способ, которым я могу исправить этот или лучший способ скопировать файлы? спасибо
try{
File f1 = new File(fpath);
File f2 = new File("C:/users/peter/documents/foldertest2/hats");
InputStream in = new FileInputStream(f1);
//For Append the file.
//OutputStream out = new FileOutputStream(f2,true);
//For Overwrite the file.
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
System.out.println("File copied.");
}
catch(FileNotFoundException ex){
System.out.println(ex.getMessage() + " in the specified directory.");
System.exit(0);
}
catch(IOException e){
System.out.println(e.getMessage());
}
UPDATE:
Я проверил права доступа к папке, и они открыты для всех пользователей и моих
Ответы
Ответ 1
Редактирование сообщений перепутано, вторая попытка:
Вы должны предоставить файловому файлу FileOutputStream допустимое имя файла, просто добавьте имя вашего файла к целевому пути C:/users/peter/documents/foldertest2/hats/hat3
только с именем папки, которое будет пытаться получить доступ к папке, как если бы это был файл и не удалось.
Ответ 2
Apache Commons IO - это еще один способ, особенно FileUtils.copyFile();
он обрабатывает все тяжелые работы для вас.
Ответ 3
Использовать Java 7:
import static java.nio.file.StandardCopyOption.*;
Files.copy(source, target, REPLACE_EXISTING);
http://docs.oracle.com/javase/tutorial/essential/io/copy.html
Ответ 4
Есть ли способ исправить этот или лучший способ скопировать файлы?
Если у вас есть опция, я бы порекомендовал вам пойти с Java version 7 и использовать Path.copyTo
.
Скопируйте файл, расположенный по этому пути, в целевое местоположение. [...]
В противном случае я бы рекомендовал хотя бы использовать пакеты NIO и FileChannels
.
Ответ 5
Если вы получаете это исключение, доступ действительно отрицается, т.е. у вас просто нет прав на запись в указанный каталог или файл.
Итак, сначала проверьте это. Попробуйте, например, создать файл в указанной директории вручную. Вероятно, вы пытаетесь создать файл в чужом домашнем каталоге? Или ваша java-программа работает как другой пользователь? Как насчет foldertest2? Он существует и доступен для записи? Попробуйте скопировать файл там.
И последний совет. Когда вам удастся скопировать файл, я бы рекомендовал вам использовать IOUtils.copy()
(из jacarta commons). Я использую его много. Это почти то, что вы реализовали, но должны писать только одну строку кода.
Ответ 6
Хм, похоже, вы пытаетесь запустить это на окнах, если вы не используете\в своем пути вместо /?
Как сказал AlexR, проверьте свои права на каталог, который вы пытаетесь записать.