2013-09-29 2 views
0

파일을 읽고 아래 코드를 통해 직렬화하려고합니다. 그러나 나는 파일을 찾을 수없는 오류가 계속 발생합니다. 나는 폴더에, 바탕 화면에 파일을 넣고 일식 자체에서 새 파일을 만들려고했습니다. 도와주세요.java.io.FileNotFoundException 오류

코드 :

public class Util implements Serializable { 

    public static void main (String[] args) throws FileNotFoundException { 
     try { 
      Automobile ford = new Automobile(); 
      FileReader fr = new FileReader(
         "C:/Users/FName LName/Desktop/Data.txt"); 
      BufferedReader br = new BufferedReader (fr); 
      String line = new String(); 

      FileOutputStream fos = new FileOutputStream ("car.ser"); 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 

      FileInputStream fis = new FileInputStream ("car.ser"); 
      ObjectInputStream ois = new ObjectInputStream(fis); 

      int k=0; 
      while ((line = br.readLine()) != null) { 
       StringTokenizer st = new StringTokenizer(line); 
       String s = new String(); 
       if (st.hasMoreTokens()) { 
        s = st.nextToken(); 
       } 

       OptionSet list = new OptionSet(); 
       int j = 0; 
       while (st.hasMoreTokens()) { 
        String temp = st.nextToken(); 
        String name = new String(); 
        int price = 0; 
        StringTokenizer token = new StringTokenizer (temp); 
        while (token.hasMoreTokens()) { 
         name = token.nextToken(","); 
         price = Integer.parseInt(token.nextToken(",")); 
         list.setOption(j,name,price); 
        } 
        j++; 
       } 
       list.setName(s); 
       ford.getOs().add(k, list); 
       k++; 
      } 
      oos.writeObject(ford); 
      ford = (Automobile) ois.readObject(); 

      for(int i=0;i< ford.getOs().size();i++) { 
       System.out.print(ford.getOs().get(i).getName()+":"); 
       for(int j=0;j<ford.getOs().get(i).getOpt().size();j++) { 
        System.out.print(ford.getOs().get(i).getOpt().get(j).getName() + 
          "," + ford.getOs().get(i).getOpt().get(j).getCost()+" "); 
       } 
       System.out.println(); 
      } 

      ois.close(); 
      oos.flush(); 
      oos.close(); 
      br.close(); 
     } catch (IOException e) { 
      System.out.println("File not found"); 
     } catch (ClassNotFoundException e) { 
      System.out.println("File not found"); 
     } 
    } 
} 
+0

가 미래에 당신이 사용하는 언어와 귀하의 질문에 태그를하시기 바랍니다. 이렇게하면 필요한 도움을받는 것이 훨씬 더 빠릅니다. –

+0

폴더 이름의 철자가 맞습니까? –

+0

ClassNotFoundException을 잡을 때 "파일을 찾을 수 없음"이라는 오류 메시지를 인쇄하는 것은 좋지 않습니다. ClassNotFoundException는 클래스가 정의되지 않았기 때문에 ObjectInputStream의 객체를 읽을 수 없다는 것을 의미합니다. 클래스가 정의되지 않았으므로 파일을 찾을 수 없습니다. 라이브러리를 변경했을 때 문제가 해결되었다는 주장은 FileNotFoundException이 아니라 문제가 아니라 ClassNotFoundException을 암시합니다. – rec

답변

-1

당신은 그래서 공백이없는 폴더 FName LName 이름을 변경하려고 할 수 있습니까? 공백이 문제 일 수 있습니다. 또한 백 슬래시 (\으로 이스케이프 처리)로 시도해보십시오. C:\\Users\\FName LName\\Desktop\\Data.txt

해당 파일에 대한 사용 권한이 있는지 확인하십시오. 파일을 C:\으로 이동하고 읽을 수 있는지 확인하십시오.

그 중 어느 것도 작동하지 않는 경우, 당신은 JVM이 파일을 볼 수 있는지 확인하기 위해 시도 할 수 있습니다 :

File f = new File(filePathString); 
if(f.exists()) { /* do something */ } 
+0

제안 해 주셔서 감사합니다. 이 문제는 프로그램 실행을 중단시키는 외부 라이브러리를 제거하여 해결되었습니다. – user2827661

+0

문자열을 사용할 때 공백은 문제가되지 않습니다. – Izmaki

+0

앞으로 슬래시는 Java에서도 잘 작동합니다. 'f.exists()'에 대한 제안은 무의미합니다. OP는 그가 실제로 사용하는 디렉토리에 대해 C : \에 대한 액세스가 훨씬 적습니다. -1 – EJP

관련 문제