3

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

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 的系统上工作而不会出现此错误。


更新

验证输出流尝试写入的文件是否存在。还验证了该文件是可写的。经过一番大惊小怪,我删除了实际路径,只是传入了文件名(不需要),这样就可以了。所以这个问题与路径有关。我需要转义路径中的字符吗?

4

6 回答 6

3

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

在正常情况下,类似于其中包含冒号 (:) 且不引用驱动器号的路径之类的东西会导致此消息。

于 2009-07-30T19:00:08.353 回答
2

您使用的路径似乎有问题。在打开它之前尝试使用 file.getPath() 来调试你的路径发生了什么。

File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);
于 2009-07-30T19:03:23.447 回答
1

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

于 2009-07-31T01:10:38.753 回答
0

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

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

顺便说一句:构造File函数不调用FileOutputStream.open(),那么异常实际上不是来自您在此处发布的代码吗?

于 2009-07-30T18:51:14.783 回答
0

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

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

于 2009-07-30T18:52:10.663 回答
0

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

于 2009-07-31T02:00:52.610 回答