5

問題が発生しました。いくつかの情報をまとめた文字列を取ります。FileOutputStreamを使用しているときにアクセスが拒否されました

void writeToFile(String input) throws Exception{ 
      File file = new File("C:\\WeatherExports\\export.txt"); 
      if(!file.exists()){ 
        file.createNewFile(); 
      } 
      BufferedWriter inFile = new BufferedWriter(new FileWriter(file,true)); 
      try{ 
        inFile.append(input); 
        inFile.newLine(); 
      } catch(Exception e){ 
        e.printStackTrace(); 
      } 
      inFile.close(); 
    } 

STACKTRACE YEILDS:

java.io.FileNotFoundException: C:\WeatherExports\export.txt (Access is denied) 

全私は時間をかけてプログラムの変更を追跡するために、文字列をファイルに書き込みをしようとすると、 はしかし、私はアクセスが拒否されたエラーを受け取りますスタックトレース:

java.io.FileNotFoundException: C:\WeatherExports\export.txt (Access is denied) 
at java.io.FileOutputStream.openAppend(Native Method) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileWriter.<init>(Unknown Source) 
at org.weatheralert.InfoManipMethods.writeToFile(InfoManipMethods.java:58) 
at org.weatheralert.Form.actionPerformed(Form.java:108) 
at javax.swing.JTextField.fireActionPerformed(Unknown Source) 
at javax.swing.JTextField.postActionEvent(Unknown Source) 
at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source) 
at javax.swing.SwingUtilities.notifyAction(Unknown Source) 
at javax.swing.JComponent.processKeyBinding(Unknown Source) 
at javax.swing.JComponent.processKeyBindings(Unknown Source) 
at javax.swing.JComponent.processKeyEvent(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.KeyboardFocusManager.redispatchEvent(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(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.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(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) 

ライン58:

BufferedWriter inFile = new BufferedWriter(new FileWriter(file,true)); 
+1

プログラムを実行しているユーザーは、そのディレクトリにファイルを作成したり書き込む権限を持っていますか? –

+0

自分のアカウントで、自分のコンピュータの管理者です。私は自分自身とコンピュータ上の他の1人のユーザーのためにUACを無効にしています。 –

+0

ディレクトリを追加せずにファイルを直接ディスクCの中に置くと正常にファイルを作成できます。 –

答えて

10

最初にフォルダを作成する必要があります。しかし、あなたはfile.mkdirs()を呼び出すことはできません。file.getParentFile()。mkdirs()を呼び出す必要があります。そうでなければ、ファイルの名前のフォルダを作成します。同じ名前)。

また、mkdirs()の結果コードを確認して、失敗した場合に備えておく必要があります。

あなたはそれを求めていませんが、createNewFile()を呼び出す必要はないと言います(FileWriterが作成します)。

と、ちょうど徹底のために、あなたのfile.closeを置くようにしてください()finallyブロック、およびあなたの例外をスローで(ちょうどそれを印刷しないでください) - ここにあなたが行く:

void writeToFile(String input) throws IOException{ 
      File file = new File("C:\\WeatherExports\\export.txt"); 
      if (!file.getParentFile().mkdirs()) 
        throw new IOException("Unable to create " + file.getParentFile()); 
      BufferedWriter out = new BufferedWriter(new FileWriter(file,true)); 
      try{ 
        out.append(input); 
        out.newLine(); 
      } finally { 
        out.close(); 
      } 
    } 
6

あります別の可能性(事実の後でこれを読んでいるかもしれない人のために)。私は同じ問題がありましたが、すべての親フォルダが存在していました。問題は、作成しようとしていたファイルと同じ名前のフォルダがあることが判明しました。

+0

ニース!素晴らしい答え!たくさんの時間を節約できました。 – ryvantage

関連する問題