Java FileReader not finding files

回眸只為那壹抹淺笑 提交于 2019-12-04 02:46:32

问题


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)

回答1:


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.




回答2:


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


来源:https://stackoverflow.com/questions/10392435/java-filereader-not-finding-files

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!