Java FileReader not finding files

2019-02-21 05:51发布

I decided to start a new question so it can strictly focus on the FileReader errors.

This is a method that takes in a file name, and a desired output name for a new file. Say the inputted filename is "hello.txt"... the method makes it something like "/home/User/hello.txt", which goes into the FileReader as a parameter. The problem is that I get this as output "/home/User/hello.txt (No such file or directory)", even though the file does exist and the directory structure and permissions are correct.

I couldn't get the method to work with just referencing the file in the local directory of the .class and .java file so I googled my way to find that absolute specifying is not a bad option.

Any input is helpful!

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()); }
}

Here is the requested stacktrace:

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)

2条回答
劫难
2楼-- · 2019-02-21 06:28

Print out what current_directory is and confirm that it matches your expectations.

I'd also print out the complete file path that you pass to the FileReader as well.

Most times that behavior doesn't match my expectations, I find that my assumptions were wrong.

查看更多
神经病院院长
3楼-- · 2019-02-21 06:31

No such file or directory would normally mean file does not exist. Please edit the code and debug it either using a IDE or by adding print statements. Also, current_directory could be renamed currentDirectory to be consistent with Java naming conventions. Try running code below.

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();
  }
}
查看更多
登录 后发表回答