通常、javaが“パラメータが正しくありません”を返した場合の意味
-
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()を使用して、パスで何が起こっているかをデバッグしてみてください。
File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);
&quot; workingDir&quot;は相対パスです。正しい「現在のディレクトリ」にいることを確認してください。アプリをUNIXからWindowsに移動したときたぶん、実行中のアプリケーションの現在のディレクトリを確認する必要があります。
アプリケーションに、ファイルに書き込むための正しいアクセス権がない可能性がありますか?読み取り専用ですか、それとも保護されていますか?
FileOutputStream.open()
はネイティブメソッドです。「パラメーターが正しくありません」など、あらゆる種類の例外メッセージを想定しています。基盤となるOSから来ています。
ところで: File
コンストラクターは FileOutputStream.open()
を呼び出さないため、実際に投稿したコードからの例外ではありませんここですか?
パス内のバックスラッシュのせいでしょうか?パスが長すぎますか?このエラーにはファイル名が無効です(特殊文字...)?
まったく間違っているかもしれませんが、OS依存のエラーのように聞こえるので、試してみる価値があります。
JVMプロセスを実行するユーザーに、そのファイルにアクセスするための適切な権限があることを確認してください。