Ссылка на файл, каков правильный синтаксис

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

Эта строка правильная?

Файл newUploadedFile = новый файл ("D:\\" + имя_файла);

Дело в том, что файл загружается правильно в нужное мне место, но я получаю сообщение об ошибке:

java.io.IOException: Неверный синтаксис имени файла, имени каталога или метки тома.


person Ankur    schedule 25.02.2010    source источник
comment
Одиночная косая черта, которую вы видели ранее, должна была быть двойной косой чертой \\, извините за это.   -  person Ankur    schedule 25.02.2010
comment
Вам нужно опубликовать всю функцию. Сейчас у нас нет возможности узнать, где ваш код пошёл не так.   -  person futureelite7    schedule 25.02.2010


Ответы (3)


Всегда избегайте обратной косой черты в строках Java.

File newlyUploadedFile = new File("D:\\" + fileName);

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

newlyUploadedFile.exists();

и посмотреть, что он возвращает. Если ваш путь возвращает false, значит, у вас ошибка в имени файла.

person futureelite7    schedule 25.02.2010
comment
Я не думаю, что это проблема. Отсутствующий escape в литерале String приведет к ошибке компиляции Java, а не к IOException. - person Stephen C; 25.02.2010
comment
да я тоже это заметил. Однако отсутствие косой черты определенно вызовет проблемы с путем. - person futureelite7; 25.02.2010
comment
@futureelite7 - вы делаете предположения. Мы не знаем, что на самом деле содержит fileName. Что, если он (уже) начинается с `\`? - person Stephen C; 25.02.2010
comment
Имя файла не начинается с \ - person Ankur; 25.02.2010
comment
По моему опыту, если окна видят несколько косых черт, они все равно игнорируются. Но я имел в виду тот факт, что постер изначально забыл убрать косые черты. - person futureelite7; 25.02.2010

Во-первых, код, представленный в вопросе, не будет компилироваться. Но поскольку вы видели IOException, вы явно используете другой код.

Чтобы получить IOException, жалующийся на синтаксис пути, должно быть что-то не так с путем. Что на самом деле дает вам "D:\\" + fileName? Добавьте вызов System.err.println(...), чтобы узнать, что это такое.

person Stephen C    schedule 25.02.2010
comment
Спасибо, попробую... но почему не компилируется - старался быть кратким и не приводить весь код. Но я не понимаю, почему тот бит, который я дал, не скомпилируется. - person Ankur; 25.02.2010
comment
@Ankur - теперь, когда вы исправили текст вопроса, он скомпилируется :-) - person Stephen C; 25.02.2010

Заметки:

  1. Этот текст исключения поступает из операционной системы Windows, а не из Java.

  2. Никогда не нужно использовать обратную косую черту в именах файлов Java. По крайней мере, если есть, я никогда не сталкивался ни с одним за 13 лет.

person user207421    schedule 25.02.2010
comment
Я хотел бы знать, почему отрицательный голос. Здесь ноль фактических ошибок. - person user207421; 25.02.2010
comment
Проголосовали против. Это действительно полностью справедливо. Ошибка возникает из-за базовой файловой системы, и косая черта всегда работала так же хорошо в Windows. - person BalusC; 25.02.2010