Как правило, что это означает, когда java возвращает “Параметр неверен”?
-
05-07-2019 - |
Вопрос
Я создаю файл следующим образом
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.
Обновить
Проверено, что файл существует, в который выходной поток пытается выполнить запись.Также проверено, что файл доступен для записи.После долгих хлопот я удалил фактический путь и просто передал имя файла (нежелательно), и это работает.Таким образом, проблема как-то связана с путем.Нужно ли мне экранировать символы в пути?
Решение
Это выглядит как сообщенная ошибка на компьютерах с Windows.
В обычных ситуациях что-то вроде пути, в котором есть двоеточие (:), которое не ссылается на букву диска, вызвало бы это сообщение.
Другие советы
Похоже, это проблема с используемым вами путем.Попробуйте использовать file.getPath() перед тем, как открыть его, чтобы отладить то, что происходит с вашим path.
File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);
Если ваш "workingDir" является относительным путем, то вы уверены, что находитесь в правильном "текущем каталоге" при переносе вашего приложения из unix в Windows?Возможно, вам следует проверить, каков текущий каталог запущенного приложения.
Возможно, у приложения нет правильного доступа для записи в файл?Доступен ли он только для чтения или иным образом защищен?
FileOutputStream.open()
это собственный метод, я бы предположил, что любое сообщение об исключении, такое как "Параметр неверен", поступает из базовой операционной системы.
Кстати: тот самый File
конструктор не вызывает FileOutputStream.open()
, так действительно ли исключение не исходит из кода, который вы разместили здесь?
Может быть, это из-за обратной косой черты в пути?Путь слишком длинный?Неверное имя файла для этой ошибки (специальные символы ...) ?
Возможно, я совершенно не прав, но попробовать стоит, так как это звучит как ошибка, зависящая от операционной системы.
Убедитесь, что пользователь, запускающий процесс JVM, имеет правильные разрешения для доступа к этому файлу.