2017-10-30 17 views
0

코드 :는 자바에서 FileNotFoundException이 문제를 해결 할 수 없습니다

import java.io.*; 
import java.util.Scanner; 

public class WriteCSV { 
    public static void main(String[] args) { 
     String inputFilename = "coords.txt"; 
     String outputFilename = changeFileExtToCsv(inputFilename); 

     // Open files 
     PrintWriter output = openOutput(outputFilename); 
     Scanner input = openInput(inputFilename); 
     String line; 

     while (input.hasNextLine()) 
     { 
      line = input.nextLine(); 
      line.replace(' ', ','); 
      output.println(line); 
     } 

     input.close(); 
     output.close(); 
    } 

    /** 
    * Changes file extension to ".csv" 
    * @param filename 
    * @return new filename.extension 
    */ 
    public static String changeFileExtToCsv(String filename) { 
     return filename.substring(0,filename.lastIndexOf('.')) + ".csv"; 
    } 
    /** 
    * Open input for reading 
    * @param filename 
    * @return a Scanner object 
    */ 
    public static Scanner openInput(String filename) { 
     Scanner in = null; 
     try { 
      File infile = new File(filename); 
      in = new Scanner(infile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //System.out.println(filename + " could not be found"); 
      System.exit(0); 
     } 
     return in; 
    } 
    /** 
    * Open output for writing 
    * @param filename 
    * @return a PrintWriter object 
    */ 
    public static PrintWriter openOutput(String filename) { 
     PrintWriter output = null; 
     try { 
      File outFile = new File(filename); 
      output = new PrintWriter(outFile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //System.out.println(filename + " could not be found"); 
      System.exit(0); 
     } 
     return output; 
    } 
} 

오류 메시지 :

java.io.FileNotFoundException: coords.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.util.Scanner.<init>(Scanner.java:611) 
    at WriteCSV.openInput(WriteCSV.java:44) 
    at WriteCSV.main(WriteCSV.java:13) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

Process finished with exit code 0 

라인 (44)은 File infile = new File(filename); 및 coords.txt (그리고 .CSV)가 같은 디렉토리 된 .java 파일에 있습니다 안으로있다.

File 객체에 파일 이름과 확장자 만 지정하면 .java 파일이있는 동일한 디렉토리에서 해당 파일을 찾지 않아야합니까?

전체 경로를 입력하면 프로그램이 제대로 작동합니다 (coords.txt 파일이있는 한).

또한 등급 지정 프로그램에 제출하면 (작동 방식이 숨겨 짐) "프로그램 시간 초과"라고 표시됩니다. 그리고 그게 무슨 뜻인지 모르겠습니다.

+0

내 나쁜. 게시물의 편집을 참조하십시오. –

답변

0
String inputFilename = "coords.txt"; 

디스크에는 어떤 부분이 있습니까? 코드가 파일 위치를 가리키고 있는지 확인하십시오. 지금은 그렇지 않습니다. 클래스 패스를 기준으로 클래스를 가져올 수 있습니다.

InputStream input = getClass().getResourceAsStream("coords.txt"); 
+0

지금은 WriteCSV.java (위의 코드)와 같은 디렉토리에 있습니다. 그리고 말했듯이, 경로가 입력되면 작동합니다. 그러나 코드는 내가 언급 한 채점 프로그램을 위해 작성되었으며 그 프로그램이 어떻게 작동하는지 모르므로 특정 주소를 알지 못하므로 경로를 지정할 수 없습니다. –

-1

이 내용은 소스 파일의 위치가인 경우와 관련이 없습니다. 나는 당신의 질문이 이미 https://stackoverflow.com/a/3844316/8843830에 응답 된 것 같아요. (예 : coords.txt 등)

+0

이것이 정상적으로 작동하는 한 가장 좋은 대답 일 수 있으며 정상적으로 만족 스럽습니다. 그대로,이 Java 코드는 숙제입니다. 우리는 아직 getClass(). getResourceAsStream ("ListStopWords.txt");를 다루지 않았으며, 실제로 InputStream 클래스 자체 (이론적, 표면적). –

0

상대 경로는 프로그램이 실행 출신이 아닌 소스 코드가 상주하는 디렉토리를 기준으로 확인됩니다.

인쇄 해보십시오 :

System.out.println(new File("coords.txt").getAbsolutePath()); 

는 파일로 해결되는 절대 경로를 참조하십시오. IDE에서 실행중인 경우 소스 디렉토리가 아닌 프로젝트 루트의 디렉토리가됩니다. 그러나 실행중인 디렉토리를 파악해야합니다. 자바 7 Path 도입이 훨씬 안전하고,보다 강력한 파일 I/O 유틸리티입니다 - 또한


Path APIs 대신 File 선호합니다.

+0

'의 결과.getAbsolutePath()'는 .java 파일이있는 디렉토리입니다. 'D : \ Semetre \ Dropbox \ Java Projects \ Programming Assingments (Labs) \ coords1.txt' (나는 그것을 피하기 위해 coords1.txt로 변경했습니다. 이름 충돌). –

+0

파일 이름을 변경할 필요가 없습니다.'new File (String)'은 파일 시스템에 아무런 변화도주지 않고'File' 객체 만 만듭니다. 그 경로가'coords.txt' 파일의 위치를 ​​정확하게 반영하고 있다면 열려있는 경로를 찌르기 위해 뭔가 다른 일을했을 가능성이 있습니다. 그러나 무엇을 말하기는 어렵습니다. – dimo414

-1

나는 계속해서 주위를 어지럽 혔고, 이제는 그레이딩 프로그램에서 작동합니다. 단점 : 나는 무엇이 다른지 전혀 모른다. 제게 질문은 종결 된 것으로 간주 될 수 있으므로 후손을 돕고 싶다면 마음에 드는 해결책을 자유롭게 게시하십시오.

새로운 코드 :

import java.io.*; 
import java.util.Scanner; 

public class WriteCSV { 
    public static void main(String[] args) { 

     // Grading program needs hardcoded filename. Oh, well. " 
     String inputFilename = "coords.txt"; 
     String outputFilename = changeFileExtToCsv(inputFilename); 

     // Open files 
     PrintWriter output = openOutput(outputFilename); 
     Scanner input = openInput(inputFilename); 
     String line; 

     while (input.hasNextLine()) { 
      line = input.nextLine(); 
      line = line.replace(' ', ','); 
      output.println(line); 
     } 

     input.close(); 
     output.close(); 
    } 

    /** 
    * Changes file extension to ".csv" 
    * @param filename 
    * @return new filename.extension 
    */ 
    public static String changeFileExtToCsv(String filename) { 
     return filename.substring(0,filename.lastIndexOf('.')) + ".csv"; 
    } 
    /** 
    * Open input for reading 
    * @param filename 
    * @return a Scanner object 
    */ 
    public static Scanner openInput(String filename) { 
     Scanner in = null; 
     try { 
      File infile = new File(filename); 
      in = new Scanner(infile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //System.out.println(filename + " could not be found"); 
      System.exit(0); 
     } 
     return in; 
    } 
    /** 
    * Open output for writing 
    * @param filename 
    * @return a PrintWriter object 
    */ 
    public static PrintWriter openOutput(String filename) { 
     PrintWriter output = null; 
     try { 
      File outFile = new File(filename); 
      output = new PrintWriter(outFile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //System.out.println(filename + " could not be found"); 
      System.exit(0); 
     } 
     return output; 
    } 
} 
+0

이 코드와 질문의 유일한 의미있는 변경 사항은'line.replace ('', ',');가'line = line.replace ('', ',');'로 변경되었습니다. 파일이 성공적으로 열릴 때까지는 도달하지 않습니다. 내 생각 엔 코드 시스템에서 파일 이름을 바꾸거나 (문제의 파일 이름을 변경하거나 코드를 예상 한 위치로 옮긴 것) – dimo414