создание каталога на java

#java #file #ioexception #creation #filenotfoundexception

#java #файл #исключение ioexception #создание #исключение filenotfoundexception

Вопрос:

Я пытаюсь создать каталог и скопировать в него файлы. Код, который я реализовал, и его выходные данные приведены ниже. Проблема кажется очевидной, но я поясню это для тех, кто не может сказать.

Проблема


Что бы я ни делал, я, похоже, не могу создать файл назначения, необходимый для копирования файла.

Код


get это файл, который нужно скопировать, и dest это каталог, в который он будет скопирован. Для наглядности были добавлены номера строк и « ERR> «. Я прокомментировал другие методы создания файлов, которые я пробовал, но все они завершились неудачей.

 115:  private void copyTo(File get, File dest)
116:  {
117:    try
118:    {
119:      dest = new File((dest.getPath().endsWith(File.separator) ? dest.getPath() : dest.getPath()   File.separator)   get.getName());
120:      
121:      java.io.FileInputStream fis = new java.io.FileInputStream(get);
122:      if (dest.exists())
123:        while(!dest.delete());
124:      dest.mkdir();
125://      dest.createNewFile();
126://      java.io.FileWriter w = new java.io.FileWriter(dest);
127://      w.write("");
128:      System.out.println("Writing ""   get   "" to ""   dest   """);
129:ERR>  java.io.FileOutputStream fos = new java.io.FileOutputStream(dest);
130:      int b;
131:      do
132:      {
133:        b = fis.read();
134:        fos.write(b);
135:      }while (b != -1);
136:    }
137:    catch (FileNotFoundException ex)
138:    {
139://      System.err.println("404: ""   get   """);
140:      ex.printStackTrace();
141:    }
142:    catch (java.io.IOException ex)
143:    {
144://      System.err.println("IO exception on ""   get   """);
145:      ex.printStackTrace();
146:    }
147:  }
  

Вывод


 Writing "J:warehouse.txt" to "J:backupwarehouse.txt"
java.io.FileNotFoundException: J:backupwarehouse.txt (The system cannot find the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at copy.TUI.copyTo(TUI.java:129)
        at copy.TUI.copy(TUI.java:110)
        at copy.TUI.run(TUI.java:102)
        at copy.Main.main(Main.java:37)
  

Комментарии:

1. Какое возвращаемое значение из dest.mkdir()?

Ответ №1:

Используйте dest.getParentFile().mkdir() . Это создаст родительский каталог для вашего dest-файла. В случае, если может отсутствовать несколько элементов родительского пути, вы можете использовать mkdirs() метод для рекурсивного создания всех отсутствующих каталогов.

Ответ №2:

Смог исправить это сам. Довольно глупо с моей стороны не видеть этого в первую очередь…

   private void copyTo(File get, File dest)
  {
    try
    {
      File newDest = new File((dest.getPath().endsWith(File.separator) ? dest.getPath() : dest.getPath()   File.separator)   get.getName());

      java.io.FileInputStream fis = new java.io.FileInputStream(get);
      if (dest.exists())
       dest.delete();
      dest.mkdirs();
      dest.setWritable(true);
      dest.setReadable(true);
//      dest.createNewFile();
//      java.io.FileWriter w = new java.io.FileWriter(dest);
//      w.write("");
      System.out.println("Writing ""   get   "" to ""   dest   """);
      java.io.FileOutputStream fos = new java.io.FileOutputStream(newDest);
      int b;
      do
      {
        b = fis.read();
        fos.write(b);
      }while (b != -1);
    }
    catch (FileNotFoundException ex)
    {
//      System.err.println("404: ""   get   """);
      ex.printStackTrace();
    }
    catch (java.io.IOException ex)
    {
//      System.err.println("IO exception on ""   get   """);
      ex.printStackTrace();
    }
  }
  

Ответ №3:

Используйте следующее —

 dest = dest.isDirectory() ?  new File(dest, get.getName()):  new File(dest.getParentDirectory(), get.getName());
dest.getParentDirectory().mkdirs();