it-swarm-ru.tech

Как скопировать файл в Java

Я пытаюсь скопировать файл в Java и переместить его в новую папку. Это код, который я использовал, но я всегда получаю эту ошибку "(Доступ запрещен) в указанном каталоге". Есть ли способ, как я могу это исправить или лучший способ скопировать файлы? Спасибо

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());      
        }

ОБНОВЛЕНИЕ: Я проверил разрешения для папки, и все они открыты для всех пользователей и моих

12
Peter

Редактировать ups испортил, вторая попытка:

Вы должны дать FileOutputStream действительное имя файла, просто добавьте имя вашего файла к целевому пути C:/users/peter/documents/foldertest2/hats/hat3, указав только имя папки, к которой он будет пытаться обратиться, как к файлу, и произойдет сбой.

2
josefx

Apache Commons IO также является еще одним способом, в частности FileUtils.copyFile();, он выполняет всю тяжелую работу за вас.

36
Dead Programmer

Используйте Java 7:

import static Java.nio.file.StandardCopyOption.*;

Files.copy(source, target, REPLACE_EXISTING);

http://docs.Oracle.com/javase/tutorial/essential/io/copy.html

18
kpavel

Есть ли способ, как это исправить, или лучший способ скопировать файлы?

Если у вас есть опция, я бы порекомендовал вам перейти с Java версии 7 и использовать метод Path.copyTo .

Скопируйте файл, расположенный по этому пути, в целевое местоположение. [...]

В противном случае я бы рекомендовал использовать как минимум пакеты NIO и FileChannels.

3
aioobe

Хм, похоже, вы пытаетесь запустить это на Windows, не следует ли использовать\в вашем пути вместо /?

Как сказал AlexR, проверьте ваши права доступа к каталогу, в который вы пытаетесь написать.

0
Graeme Smyth

Если вы получаете это исключение, доступ действительно запрещен, т. Е. У вас просто нет прав на запись в указанный каталог или файл. Итак, сначала проверьте это. Попробуйте, например, создать файл в указанном каталоге вручную. Возможно, вы пытаетесь создать файл в чьем-либо домашнем каталоге? Или ваша Java-программа работает от имени другого пользователя? Что насчет папкиtest2? Это существует и доступно для записи? Попробуйте скопировать туда свой файл.

И последний совет. Если вам удастся скопировать файл, я бы порекомендовал вам использовать функцию IOUtils.copy() (от jacarta commons). Я использую это много. Это делает почти точно то, что вы реализовали, но писать код нужно только в одну строку.

0
AlexR