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