Подтвердить что ты не робот

Как скопировать файл в 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: Я проверил права доступа к папке, и они открыты для всех пользователей и моих

4b9b3361

Ответ 1

Редактирование сообщений перепутано, вторая попытка:

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

Ответ 2

Apache Commons IO - это еще один способ, особенно FileUtils.copyFile(); он обрабатывает все тяжелые работы для вас.

Ответ 4

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

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

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

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

Ответ 5

Если вы получаете это исключение, доступ действительно отрицается, т.е. у вас просто нет прав на запись в указанный каталог или файл. Итак, сначала проверьте это. Попробуйте, например, создать файл в указанной директории вручную. Вероятно, вы пытаетесь создать файл в чужом домашнем каталоге? Или ваша java-программа работает как другой пользователь? Как насчет foldertest2? Он существует и доступен для записи? Попробуйте скопировать файл там.

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

Ответ 6

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

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