Как правило, что это означает, когда Java возвращает «Неверный параметр» - PullRequest
3 голосов
/ 30 июля 2009

Я создаю файл примерно так

try {
    File file = new File(workingDir, obj.getName() + ".xls");
    outputStream = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
}

И я получаю

java.io.FileNotFoundException: ..\a\relative\path\obj_name.xls (The parameter is incorrect)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)

Что означает «неверный параметр»? Путь, который я проверил, существует; Разве это не должно просто создать имя файла? Это на машине Windows. Код работает без этой ошибки на Unix-системах.


Обновление

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

Ответы [ 6 ]

2 голосов
/ 30 июля 2009

Кажется, это проблема с пути, который вы используете. Попробуйте использовать file.getPath () перед его открытием, чтобы отладить то, что происходит с вашим путем.

File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);
2 голосов
/ 30 июля 2009

Это похоже на сообщение об ошибке на компьютерах с Windows.

В нормальных ситуациях это сообщение может вызывать что-то вроде пути с двоеточием (:), которое не относится к букве диска.

1 голос
/ 31 июля 2009

Если ваш «workingDir» является относительным путем, то вы уверены, что находитесь в правильном «текущем каталоге», когда вы переместили свое приложение из unix в windows? Может быть, вы должны проверить, какой текущий каталог запущенного приложения.

0 голосов
/ 31 июля 2009

Убедитесь, что пользователь, который запускает процесс JVM, имеет права доступа к этому файлу.

0 голосов
/ 30 июля 2009

Может, это из-за обратной косой черты в пути? Путь слишком длинный? Неверное имя файла для этой ошибки (специальные символы ...)?

Я могу быть совершенно не прав, но стоит попробовать, поскольку это звучит как ошибка, зависящая от ОС.

0 голосов
/ 30 июля 2009

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

FileOutputStream.open() - это собственный метод, я бы предположил, что из базовой ОС поступает сообщение об исключении любого типа, например «Параметр неверен».

КСТАТИ: конструктор File не вызывает FileOutputStream.open(), так что исключение на самом деле не исходит из кода, который вы здесь разместили?

...