通常,当java返回一个“;参数不正确";

通常,当java返回一个“;参数不正确";,java,filenotfoundexception,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\o

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

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)
java.io.FileNotFoundException:..\a\relative\path\obj\u name.xls(参数不正确)
在java.io.FileOutputStream.open(本机方法)
位于java.io.FileOutputStream。(未知源)
位于java.io.FileOutputStream。(未知源)
“参数不正确”是什么意思?我验证的路径名存在;它不应该只创建文件名吗?这是在windows计算机上。该代码在基于unix的系统上运行时不会出现此错误


更新


已验证输出流试图写入的文件是否存在。还验证了该文件是否可写。经过很多麻烦之后,我删除了实际路径,只传入了文件名(不需要),这样就可以了。因此,问题与路径有关。我需要转义路径中的字符吗

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

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


顺便说一句:这个
文件
构造函数没有调用
FileOutputStream.open()
,所以这个异常实际上不是来自你在这里发布的代码吗?

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

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

这看起来像是Windows机器上的错误


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

您使用的路径似乎有问题。在打开文件.getPath()之前,请尝试使用它来调试您的路径

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

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

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

您可能还想尝试将相对路径更改为绝对路径,windows有时会感到奇怪……我更新了代码,忘记了一个重要部分。outputStream=新文件outputStream(文件);在尝试写入文件之前,您可能应该检查file.exists()是否返回true。请验证该文件是否存在且可写,并且仍然得到抛出的错误(参数不正确)outputStream=new FileOutputStream(file);在本例中,我们使用的是相对路径。您是否查看了我回答中的“报告的错误”链接?我看起来像是发生在你身上的事。是的,我不知道如何解决它。它不喜欢文件api生成的路径,所以我基本上遇到了你提到的bug。我找不到我特别喜欢的解决方法。。。我最后做的是在数据库中创建一个临时文件。目录,然后将该文件复制到它应该位于的位置,然后清理临时文件。谢谢\tmp\RenderFiles\1343488-1249043441342-xq58o\GT-10-2009-07-31 08:30:24.xls这是传递到输出流的实际路径。是的,其他进程正在相同位置(不同代码)创建文件和目录,它们被迫在特定目录中启动应用程序。否则会有许多其他错误。