Что такое возможные причины для java.io. IOException: “Имя файла, имя каталога или синтаксис метки тома являются неправильными”

[Column(TypeName = "decimal(18,2)")]

это будет работать с первыми миграциями кода, как описано здесь здесь .

14
задан Dima 26 September 2008 в 20:04
поделиться

9 ответов

Попробуйте это, поскольку это проявляет больше заботы о корректирующихся символах разделителя каталога в пути между targetPath и именем файла:

File targetFile = new File(targetPath, filename);
6
ответ дан 1 December 2019 в 12:40
поделиться

Попытайтесь создать файл в другом каталоге - например, "C:\" после того, как Вы удостоверились, что у Вас есть доступ для записи к тому каталогу. Если это работает, путь файла является неправильным.

Смотрят на комментарий в Исключении и пытаются варьироваться все элементы по пути файла. Эксперимент. Сделайте выводы.

1
ответ дан 1 December 2019 в 12:40
поделиться

Вы проверяете, что targetPath является каталогом, или просто что что-то существует с тем именем? (Я знаю, что Вы говорите, что пользователь может скопировать его с операционной системы, но возможно они вводят что-то еще).

targetPath уже заканчивается File.separator?

(Помогло бы, могли ли Вы зарегистрировать и сказать нам, что значение targetPath и имени файла находится на провальном случае)

0
ответ дан 1 December 2019 в 12:40
поделиться

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

, Кроме того, можно также смотреть на Каналы вместо того, чтобы использовать цикл. ;-)

0
ответ дан 1 December 2019 в 12:40
поделиться

Возможно, проблема состоит в том, что это копирует файл по сети к общему диску? Я думаю, что Java может иметь проблемы при записи файлов с помощью NFS, когда путь - что-то как \mypc\myshared папка.

, Каков путь, где эта проблема происходит?

0
ответ дан 1 December 2019 в 12:40
поделиться

Вы говорите "для некоторых пользователей" - таким образом, это работает на других? Каково различие здесь, пользователи выполняют различные экземпляры на различных машинах, или действительно ли это - сервер, это обслуживает параллельных пользователей?

, Если бы последний, я сказал бы, это - ошибка параллелизма так или иначе - две проверки потоков пытаются создать файл с WinNTFileSystem.createFileExclusively (Собственный метод) одновременно.

Ни один createNewFile или createFileExclusively синхронизируются, когда я смотрю на источник OpenJDK, таким образом, Вам, вероятно, придется синхронизировать этот блок самим.

0
ответ дан 1 December 2019 в 12:40
поделиться

Возможно, файл уже существует. Могло иметь место, не ли Ваше разрешение метки времени достаточно хорошо. Поскольку это - IOException, который Вы получаете, это не могла бы быть проблема разрешения (в этом случае, Вы получите SecurityException).

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

Взгляд общедоступная булевская переменная createNewFile () для получения дополнительной информации о методе Вы используете.

0
ответ дан 1 December 2019 в 12:40
поделиться

Поскольку я не смог воспроизвести ошибку на своей собственной машине или достать машину пользователя, где код перестал работать, я ожидал до сих пор для объявления принятого ответа. Я изменил код на следующее:

File parentFolder = new File(targetPath);
... do some checks on parentFolder here ...
File targetFile = new File(parentFolder, filename);
targetFile.createNewFile();
fileInputStream = new FileInputStream(fileToCopy);
fileOutputStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[64*1024];
int i = 0;
while((i = fileInputStream.read(buffer)) != -1) {
    fileOutputStream.write(buffer, 0, i);
}

После этого это работало на пользователя, сообщающего о проблеме.

, Таким образом, это кажется, ответ Alexanders добился цели - хотя я на самом деле использую немного отличающегося конструктора, чем он дал, но в том же направлении.

я все же должен уговорить того пользователя на помощь мне проверяющий, что изменение кода зафиксировало ошибку (вместо него делающий что-то по-другому) путем выполнения старой версии снова и проверки, перестало ли это все еще работать.

вход btw. существовал, и зарегистрированный путь казался хорошо - извините за то, что не было упомянуто это. Я считал это само собой разумеющимся и нашел, что это излишне усложнило код в вопросе.

спасибо за полезные ответы.

0
ответ дан 1 December 2019 в 12:40
поделиться

Я столкнулся с той же проблемой. Я думаю, это как-то связано с разрешением на запись. У меня возникла ошибка при попытке записи на c: \, но при переходе на D: \ все работало нормально. Очевидно, у Java не было разрешения на запись на мой системный диск (под управлением Windows 7, установленной на C :)

6
ответ дан 1 December 2019 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: