6

UNIXシステムにマウントされたウィンドウフォルダーにファイルを書き込もうとすると、投稿のタイトルエラーが発生します。Linux OS の Tomcat 6 内で実行され、Windows ネットワーク フォルダーに書き込む必要がある Web サービスを開発しました。システム管理者はこれを Linux サーバーにマウントしており、問題なくファイルを作成および変更できます。投稿されたコードを実行しようとすると、次の例外が発生します。

許可が拒否されました java.io.IOException: 許可が java.io.UnixFileSystem.createFileExclusively(Native Method) で java.io.File.createNewFile(File.java:850) で拒否されました

奇妙なことは、ネットワーク フォルダーの File.createNewFile メソッドに関連しているように見えることです。実際、サービスは、デバッグ (サービスの開発に使用する PC) と tomcat の両方で、問題なくローカル ファイル システムに書き込むことができます。フォルダー システム管理者は、Linux サーバーで私を提供しています。ファイルは作成されますが空であり、create メソッドに続くログ エントリは出力されません。さらに、プレーンな出力ストリームを使用してファイルを作成および書き込む場合、問題はありません。

ウェブ上で例外に関する説明が見つかりません。私は Java の経験があまりないので、このエラーが発生する理由を理解したいと思います。私は間違った方法でそれを使用していますか? ライブラリのバグですか?いくつかのパラメーターを渡すのを逃しますか? 述べたように、プレーンな出力ストリームを使用して問題を解決しました。これは、Java の理解を深めるための質問です。

FileOutputStream fos = null; 
try{ 

   log.info(String.format("file length: %s",streamAttach.length)); 
   log.info(String.format("check File : %s",filename)); 
   File f = new File(filename); 
   if(f.exists()) 
    ...                        

   boolean done= f.createNewFile();//here comes the exception
   //nothing of the following happens 
   if(!done) 
       throw new NWSException("error creating file"); 
   log.info(String.format("file %s creato", nomeFile)); 

事前に回答ありがとうございます

4

3 に答える 3

5

私は最近この問題に遭遇し、java.io.File.createNewFile() が実際に「パーミッションの変更」パーミッションを必要とすることを発見しました (このエントリーは、フォルダーのパーミッションを確認する際に「セキュリティー」->「詳細」の下で見つけることができます)。これがないと、ファイルが作成され、続いて IOException がスローされます。

手動でテストするときにフォルダーにファイルを作成できるため、欺瞞的ですが、この特定のアクセス許可がない場合、createNewFile() は失敗します (おそらく、作成するファイルのアクセス許可を変更できるなど)。

于 2011-09-05T00:36:37.923 に答える
2

それは間違いなくJava固有の問題ではありません。この Unix フォルダーが Windows にマップされている場合は、ファイル エクスプローラーを開いて、このディレクトリにファイルを作成してみてください。許可も拒否されると思います。この場合、この問題を修正するか、システム管理者に支援を依頼してください。

幸運を!

于 2011-02-09T11:26:37.230 に答える