2012-05-01 18 views
-1

新しい質問を開始することに決めたので、FileReaderのエラーに厳密に焦点を当てることができます。Java FileReaderがファイルを見つけられない

これは、ファイル名と新しいファイルの出力名を取り込む方法です。入力されたファイル名が "hello.txt"であるとすれば、このメソッドは "/home/User/hello.txt"のようになります。これはパラメータとしてFileReaderに入ります。問題は、ファイルが存在し、ディレクトリ構造と権限が正しいにもかかわらず、出力として "/home/User/hello.txt(No such file or directory)"と表示されることです。

.classと.javaファイルのローカルディレクトリでファイルを参照するだけで動作するメソッドを取得できませんでしたので、絶対指定が悪いオプションではないことがわかりました。

入力が便利です!

java.io.FileNotFoundException: /home/User/hello.txt 

(No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:137) 
    at java.io.FileInputStream.<init>(FileInputStream.java:96) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at TEST.fileGenerator(TEST.java:131) 
    at TEST.generateCSV_TWO(TEST.java:122) 
    at TEST$4.actionPerformed(TEST.java:102) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253) 
    at java.awt.Component.processMouseEvent(Component.java:6203) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
    at java.awt.Component.processEvent(Component.java:5968) 
    at java.awt.Container.processEvent(Container.java:2105) 
    at java.awt.Component.dispatchEventImpl(Component.java:4564) 
    at java.awt.Container.dispatchEventImpl(Container.java:2163) 
    at java.awt.Component.dispatchEvent(Component.java:4390) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055) 
    at java.awt.Container.dispatchEventImpl(Container.java:2149) 
    at java.awt.Window.dispatchEventImpl(Window.java:2478) 
    at java.awt.Component.dispatchEvent(Component.java:4390) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649) 
    at java.awt.EventQueue.access$000(EventQueue.java:96) 
    at java.awt.EventQueue$1.run(EventQueue.java:608) 
    at java.awt.EventQueue$1.run(EventQueue.java:606) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116) 
    at java.awt.EventQueue$2.run(EventQueue.java:622) 
    at java.awt.EventQueue$2.run(EventQueue.java:620) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:619) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138) 

答えて

-1

current_directoryが何であるかを印刷し、それはあなたの期待と一致していることを確認します。ここでは

public void fileGenerator(String in, String out) {  
try { 
    String current_directory = System.getProperty("user.dir"); 
    Scanner input = new Scanner(new FileReader(current_directory+"/"+in)); 
    PrintWriter output = new PrintWriter(current_directory+"/"+out); 
     while(input.hasNext()) { 
     String line = input.nextLine(); 
    output.println(line); 
    output.close(); 
    } 
    } catch (Exception e) { System.out.println(e.getMessage()); } 
} 

は、要求されたスタックトレースです。

また、FileReaderに渡す完全なファイルパスも出力します。

行動が私の期待に合わないことがほとんどの場合、私の仮定は間違っていました。

+0

完全に一致します。 – user1062058

+0

JVMを信じてください。それが存在しないと言えば、何か別のことが起こっている。 – duffymo

+0

私はコードを単純化されたJavaファイルでテストしました。 – user1062058

0

このようなファイルまたはディレクトリは、通常、ファイルが存在しないことを意味しません。コードを編集し、IDEを使用するか、printステートメントを追加してデバッグしてください。また、current_directoryは、Java naming conventionsと一致するようにcurrentDirectoryに名前を変更できます。以下のコードを実行してみてください。

public static void fileGenerator(String in, String out) {  
try { 
    String currentDirectory = System.getProperty("user.dir"); 
    System.out.println(currentDirectory); 
    String inputFileName = currentDirectory+"/"+in; 
    File inputFile = new File(inputFileName); 
    System.out.println(inputFile.getAbsolutePath()); 
    FileReader inputFileReader = new FileReader(inputFile); 
    Scanner input = new Scanner(inputFileReader); 
    PrintWriter output = new PrintWriter(currentDirectory+"/"+out); 
    while(input.hasNext()) { 
     String line = input.nextLine(); 
    output.println(line); 
    output.close(); 
    } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

プリントアウトされたディレクトリと完全に一致します。申し訳ありませんが、命名規則のために、私はちょうどJavaでおしゃぶりPHPの開発者です – user1062058

+0

stacktraceを投稿してください。ファイルの絶対パスを出力しましたか? – krishnakumarp

関連する問題