2013-05-16 4 views
0

이 문제는 조금 있습니다. 사용자가 데이터를 입력하고 데이터를 object.obj 파일에 저장해야하는 배열을 만들려고했습니다.배열에서 serializable 객체를 작성하십시오.

이 내 코드입니다 :

import java.util.*; 

    public class insertData implements java.io.Serializable 
{ 
     Scanner keyboard=new Scanner(System.in); 
     private String One; 
     private String Two; 


     public void new() 
     { 
      System.out.println("How many lines do you want to insert?"); 
      int p=keyboard.nextInt(); 

      for (int i = 0; i < p; i++) 
      { 
       One=keyboard.next(); 
       Two=keyboard.next(); 
      } 
     } 

     public String toString() 
     { 
     new(); 
     String text=One+"\t"+Two; 
     return text; 
     } 

} 

그리고 File 클래스는 다음과 같습니다

import java.io.*; 

    public class fileA 
    { 
     insertData iD = new insertData() 
     String a; 
     ObjectOutputStream oos; 
     ObjectInputStream ois; 

     public void writeFile(File file) 
    { 
     try 
     { 
       oos=new ObjectOutputStream(new FileOutputStream(file1)); 
       a=iD.toString(); 
       oos.writeObject(a); 
       oos.close(); 

     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public void readFile(File file1) 
    { 
      try 
      { 
       ois=new ObjectInputStream(new FileInputStream(file1)); 
       String str=(String)ois.readObject(); 
       System.out.println(str); 
       ois.close(); 
      } 
      catch (IOException ex) 
      { 
      System.err.println(ex); 
      } 
      catch (ClassNotFoundException ex) 
      { 
      System.err.println(ex); 
      } 

    } 
    } 

문제는이 입력 한 데이터의 마지막 라인을 절약 할 수 있다는 것입니다. 결과는 다음과 같아야합니다

Text1  Text2 
aaaaa  bbbbb 
ccccc  ddddd 
+0

'새()'올바른 방법이 아닙니다. –

+0

메인 클래스는 어디에 있습니까? –

+1

@ Eng.Fouad가 옳습니다. 메소드 이름으로 java 예약 키워드를 사용할 수 없습니다. 첫 번째 장소에서 프로그램을 어떻게 실행할 수 있는지에 대한 의문이 제기됩니다. 컴파일러 오류가 있어야합니다. –

답변

1

문제는 당신 만이 루프를 통해 이동 그래서 하나 OneTwo을 가지고있다.

for (int i = 0; i < p; i++) 
{ 
    One=keyboard.next(); 
    Two=keyboard.next(); 
} 

값을 덮어 쓰는 중입니다. 그래서 이것이 당신이 마지막 가치를 얻는 이유입니다.

해야 할 일은 컬렉션에 이러한 요소를 저장하는 것입니다.

List<String> ones = new ArrayList<String>(); 
List<String> twos = new ArrayList<String>(); 
... 
for (int i = 0; i < p; i++) 
{ 
    ones.add(keyboard.next()); 
    twos.add(keyboard.next()); 
} 

또는 버퍼에 추가 할 수 있습니다.

StringBuilder sb = new StringBuilder(); 
... 
for (int i = 0; i < p; i++) 
{ 
    sb.append(keyboard.next()+" " +keyboard.next()+"\n"); 
} 

은 그럼 그냥 파일에 쓰는 적절하게

+0

답장을 보내 주셔서 감사합니다. @ greedybuddha. 마침내 문제를 해결할 수있게되었습니다. 텍스트를 추가하는 데 "+ ="문제가있었습니다. 추신 : 문제가 없었으므로 주 수업이 생략되었으며 new()가 예일뿐입니다 ... ;-) 다시 도움 주셔서 감사합니다. 문제 해결됨! – user2328079

+0

문제는 없지만 + =는 잘 작동하는 해결책입니다. 그것은 StringBuilder와 똑같은 일을하지만, 덜 효율적입니다.). – greedybuddha

관련 문제