Как правило, что это означает, когда java возвращает “Параметр неверен”?

StackOverflow https://stackoverflow.com/questions/1208566

  •  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, имеет правильные разрешения для доступа к этому файлу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top