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 に答える
1

「workingDir」が相対パスの場合、アプリを unix から Windows に移動したときに正しい「現在のディレクトリ」にいると確信していますか? おそらく、実行中のアプリケーションの現在のディレクトリが何であるかを確認する必要があります。

于 2009-07-31T01:10:38.753 に答える
0

アプリケーションがファイルに書き込むための適切なアクセス権を持っていない可能性がありますか? 読み取り専用ですか、それとも保護されていますか?

FileOutputStream.open()はネイティブ メソッドであるため、「パラメーターが正しくありません」などの例外メッセージは、基盤となる OS から送信されていると想定します。

ところで:Fileコンストラクターは を呼び出さないので、FileOutputStream.open()実際にここに投稿したコードから例外が発生していませんか?

于 2009-07-30T18:51:14.783 に答える
0

たぶん、パスのバックスラッシュが原因ですか?パスが長すぎますか?このエラーのファイル名は無効です (特殊文字...)?

私は完全に間違っているかもしれませんが、OS 依存のエラーのように聞こえるので試してみる価値があります。

于 2009-07-30T18:52:10.663 に答える
0

JVM プロセスを実行するユーザーが、そのファイルにアクセスするための適切な権限を持っていることを確認してください。

于 2009-07-31T02:00:52.610 に答える