2011-09-27 11 views
0

텍스트 파일에서 다음 데이터를 복원하려고합니다. 문제는 단 하나의 문자열/라인 내가 복원 할 수 있습니다, 나는 나머지 데이터를 복원 할 수 없습니다.텍스트 파일을 복원하는 방법은 무엇입니까?

여기에 코드입니다 :

public static String restore(String filename) throws IOException, ClassNotFoundException 
{ 
    FileInputStream fn = new FileInputStream(filename); 
    ObjectInputStream ob = new ObjectInputStream(fn); 
    String sample = (String) ob.readObject(); 

    return sample; 
} 
+4

실제로 텍스트 파일입니까? 'ObjectInputStream'을 사용하면 실제로는'ObjectOutputStream'에 의해 생성 된 직렬화 된 Java 객체를 가진 이진 파일이라는 것을 알 수 있습니다. 당신이 가진 문제는 정확히 무엇입니까? 'ClassCastException'가 발생 했나요? 그 파일은 어떻게 만들어 집니까? 기타 – BalusC

+1

귀하의 질문에 명확하지 않습니다. '텍스트'파일 인 경우 코드가 개체를 읽는 이유는 무엇입니까? 'Game' 객체를 읽는다면, 'string/line'을 읽지 않아야합니다. '나머지 데이터'란 무엇입니까? 이러한 질문에 대답하는 데 도움이되는 한 가지 방법은 SSCCE입니다. 더 빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. –

+0

나는 코드를 이미 편집했다. 위의 내용을 볼 수있다. 그것은 이전의 실수였습니다. – sack

답변

3

귀하의 코드는 바이너리 파일 내에서 첫 번째 요소를 읽을 수 없습니다.

public static void restore(String filename) throws IOException, ClassNotFoundException 
{ 
    FileInputStream fn = new FileInputStream(filename); 
    ObjectInputStream ob = new ObjectInputStream(fn); 
    String string1 = (String) ob.readObject(); 
    String string2 = (String) ob.readObject(); 

} 

파일을 직렬화하는 동안 덮어 쓰지 않았습니까?

하지만 내가 아는 한 당신은 텍스트 파일을 읽고 쓰는 것보다 String-Object를 serialize/deserialize하고 싶지 않습니다.

파일을 읽고 쓰고 싶다면 ObjectInputStream을 잘못 사용하고있는 것입니다. http://download.oracle.com/javase/1.3/docs/api/java/io/BufferedReader.html

4

이 질문의 의미를 이해하기 어렵다,하지만 당신은 단지 .txt 파일에서와 배열로 라인을 읽을 수 있다면,이 두 가지 방법이 도움이 될 수 있습니다 : 살펴 아케

.

String[] textArray = readFromFile("yourfilename.txt"); 이렇게하면 파일의 각 줄이 요소로 배열됩니다.

Scanner fScan(String filename) { 

     Scanner sc = null; 
     try { 
      sc = new Scanner(new File(fname)); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found:" + fname + " " + e); 
     } 
     return sc; 
} 

String[] readFromFile (String fname) { 
     Scanner sc = fScan(fname); 
      int length = 0; 
      String lineCounter; 
     while (sc.hasNext()){ 
      lineCounter = sc.nextLine(); 
      length++; 
     } 

     String[] array = new String[length]; 

     sc = fScan(fname); 

     for (int i = 0; i < length; i++) { 
     array[i] = sc.nextLine(); 
     } 

     sc.close(); 
     return array; 
} 
관련 문제