2011-01-02 74 views
1

私のプログラムは、Webサイトのソースコードをダウンロードし、変更し、ファイルを作成し、FTP経由で再アップロードします。作成したファイルを開こうとするとしかし、私は次のエラーが表示されますアクセスが拒否されましたJava FileWriter/FileInputStream

java.io.FileNotFoundException: misc.html (Access is denied) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at Manipulator.uploadSource(Manipulator.java:63) 
at Start.addPicture(Start.java:130) 
at Start$2.actionPerformed(Start.java:83) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

私は、フォルダのディレクトリに移動し、私はアクセスが拒否されました受信メモ帳で「misc.html」を開こうとします。私のコードはかなり単純です:

File f = new File(page.sourceFileName); 
    try { 
     FileWriter out = new FileWriter(f); 
     out.write(page.source); 
     out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } InputStream input = new FileInputStream(f); 

これは私のプログラムからの抜粋です。私はこれを別のテストプログラムにコピーして正常に動作し、misc.htmlファイルを作成し、FileInputStreamと手動で再オープンします。

私は管理者の権利について心配しますが、問題のプログラムの後にRIGHTを実行すると、テストプログラムは正常に動作します。私はまた、ファイルが存在するかどうかをチェックしてFileメソッドを持つファイルであり、それも同様です。これは私が以前の入出力を適切に閉じない結果ですか?私はすべてをチェックしようとしましたが、私はかなり肯定的です。終了するとすぐにすべてのストリームを閉じます。

Help! :)

UPDATE:

私はFileInputStreamのコードをコメントアウトし、ちょうどファイルがまだアクセス拒否されてFileWriterを残す場合。 FileWriterコードを削除すると、Fileは作成されません(つまり、何も上書きしていません)。 FileWriterコードは、ファイルが初めて作成されたときに例外がスローされませんが、手動でファイルを開くことはできません。

答えて

2

あなたが本当にそのファイルを読み取るための十分な権限を持っている場合は、私が気づくことができるものは、あなたが適切にストリームを使用していないということです。

out.write(page.source); // if this throws an exception 
out.close(); //this is not called, and the file remains open 

をあなたはfinallyブロック内のストリームを閉じる必要があります。

FileWriter fw = null; 
try { 
    fw = new FileWriter(f); 
    fw.write(page.source); 
} catch (IOException ex) { 
    ex.printStackTrace(); //consider a logger 
} finally { 
    IOUtils.closeQuietly(fw); 
} 

同じことがInputStreamの今

のために行くことは、ファイルのクローズ時に発生した例外を報告しないので、IOUtils.closeQuietly(fw)は、少し議論があります。それはapache commons-io(外部依存関係)からです。 close()を呼び出す前に、finally内の別のtry-catchと交換してから、nullのチェックに置き換えることができます。幸運なことに、これはJava 7のほうがはるかに簡単です。

+0

しかし、問題は、InputStream input = ... – Matt

+0

にエラーが表示されています。ファイルを読み取る権限を_do_持っていれば、そのことがわかります。ストリーム処理を修正して、やり直してください。 – Bozho

+0

私はまだ同じスタックトレースを受け取ります。 FileWriterはうまく書けるようですが、どういうわけかFileInputStreamが開くことができない方法で「misc.html」を作成します。 FileInputStreamのキャッチはエラーを捕捉し、インスタンス化が失敗したためにクローズする必要はありません(nullチェック)。 – Matt

1

このようなエラーは、ディレクトリで作業しようとしているときに発生するようです。確かにあなたはしない?

は、プログラムがアプレットまたはWebStartのアプリケーションとして

+0

ファイルですか?真は書き込み可能ですか? trueは読み込み可能ですか? trueは実行可能ですか?真の絶対パス:C:\ Users \ Matt \ workspace \ PictureUploader \ misc.html – Matt

0

の中で実行してい....何を開閉いくつかの余分なログ出力を作成し、ここに戻っ?もしそうなら、JVMサンドボックスはあなたの(信頼できない)コードがローカルファイルシステムにアクセスするのを妨げている可能性があります。

+0

私はJavaとEclipseに精通していませんが、私がプログラムを実行するときには常にアプレットではなくApplicationを使用します。 – Matt

関連する問題