通常,当java返回“参数不正确”时它意味着什么

时间:2009-07-30 18:48:28

标签: java filenotfoundexception

我正在创建一个像这样的文件

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 个答案:

答案 0 :(得分:3)

在Windows计算机上看起来像reported bug

在正常情况下,类似于其中带有冒号(:)但不引用驱动器号的路径会导致此消息。

答案 1 :(得分:2)

您使用的路径似乎存在问题。在打开它之前尝试使用file.getPath()来调试路径上发生的事情。

File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);

答案 2 :(得分:1)

也许应用程序没有正确的写入文件的权限?它是只读的还是受到保护的?

FileOutputStream.open()是一种本机方法,我会假设任何类型的异常消息,例如“参数不正确”来自底层操作系统。

BTW: File构造函数没有调用FileOutputStream.open(),所以实际上这个异常并非来自您在此处发布的代码吗?

答案 3 :(得分:1)

如果您的“workingDir”是相对路径,那么当您将应用程序从unix移动到Windows时,您确定自己位于正确的“当前目录”吗?也许,您应该检查正在运行的应用程序的当前目录是什么。

答案 4 :(得分:0)

也许是因为路径中的反斜杠?路径太长了?文件名对此错误无效(特殊字符...)?

我可能完全错了,但值得一试,因为它听起来像是一个依赖操作系统的错误。

答案 5 :(得分:0)

确保运行JVM进程的用户具有访问该文件的正确权限。