2014-01-13 1 views
1

나는 get과 set 메소드를 포함한 Vehicle 객체에 대한 모든 정보를 포함하는 Vehicle 클래스를 가지고있다. 목록을 추가/삭제하고 스크롤 할 수있는 방법으로 모든 Vehicle 객체의 목록을 유지 관리하는 Showroom 클래스도 있습니다.I/O 파일의 객체 데이터 읽기

내 주 (VehicleDriverClass라는 별도의 클래스)에서 파일에 Vehicle 데이터를 쓰고 파일에서 Vehicle 데이터를 읽으려면 I/O를 사용하려고합니다. 나는 파일에 쓸 수있다. 나는 메모장을 사용하고 있으므로 .txt 파일을 읽을 수 있습니다. 내가 겪고있는 문제는 파일에서 읽을 때 줄 끝을 종료하는 방법입니다. Vehicle 클래스의 생성자는 다음과 같습니다. 매개 변수를 알 수 있습니다.

public Vehicle(String man, String mod, String VIN, String dateOfMan, char taxBand, int  costOfVehicle) 
{ 
    this.manufacturer = man; 
    this.model = mod; 
    this.VIN = VIN; 
    this.dateOfManufacture = dateOfMan; 
    this.taxBand = taxBand; 
    this.costOfVehicle = costOfVehicle; 
} 

이것은 입력 방법에 대한 것입니다 (파일을 읽는 중, oject를 만들지 않고). Showroom이 전달되는 것은 나중에 차량 객체를 생성하여 쇼룸에 추가 할 때 사용하기위한 것입니다.

// 코드가 아래로 바뀌 었습니다.

이 구현에서는 dataFromFile을 콘솔에 출력 할 때 새로운 행이 아닌 한 행에 모두 있습니다. '\ n'을 읽을 때 readline()이 행을 종료하지 않습니까?

내 데이터가 입력 파일에 저장되는 방법은 다음과 같습니다.

Fordtest\n Focus\n frank\n ioCheck\n 09/01/1989\n 23/11/2013\n true\n d\n 1995\n 

지금은 어떻게 종료해야합니까? 그래서 나는 이것으로부터 객체의 생성을 구현할 수 있습니다.

편집 : I/O가 작동 중입니다. 나는 지금 내 Vehicle 객체의 생성자와 마지막 두 변수에 대한 char 및 int 데이터 유형이 필요한데 문제가있다. 현재 메서드를 사용하면 문자열 배열에 있습니다.

는 I 위의 코드를 제거하여 정적 무효

addNewVehicleFromFile (쇼룸들) { 문자열 dataFromFile below.public 새로운 구현을 추가; String [] tokens = null;

try 
    { 
     File fileReader = new File("AddNewVehicleFromFile.txt"); 
     FileReader fr = new FileReader(fileReader); 
     BufferedReader br = new BufferedReader(fr); 

     while ((dataFromFile = br.readLine()) != null) 
     { 
      tokens = dataFromFile.split("~"); 
     } 

     System.out.println(Arrays.toString(tokens)); 

     Vehicle inputVehicle = new Vehicle(tokens[0], tokens[1], tokens[2], tokens[3], 
       tokens[4], tokens[5]); 
     /* 
     Erorr above here with these two. token[4] should be a char and [5] an int 
     */ 

     s.addVehicle(inputVehicle); 

     System.out.println("addNewVehicleFromFile Complete"); 

    } 
    catch (FileNotFoundException fnfe) 
    { 
     System.out.println("File not found exception: " + fnfe.toString()); 
    } 
    catch (IOException ioe) 
    { 
     System.out.println("I/O exception: " + ioe.toString()); 
    } 

} 

이 두 변수를 호출하는 데 toChant 및 toChang 메서드를 사용해야합니까? 또는 int 또는 유사한 구문 분석.

답변

1

을 나는 당신이 당신의 입력 데이터 형식을 변경 한 경우에는 더 잘 할 것 같아요. 이것이 XML과 JSON이 탄생 한 것입니다. 현재 배열을 유지해야하는 경우 데이터 요소 사이의 구분 기호를 \ n 대신 물결표 '~'와 같이 변경하십시오.

그래서 귀하의 의견은 다음과 같습니다

String [] tokens = data.split("~"); 

가 차량 만드는 자신에게 약간의 팩토리 메소드를 작성 :

Fordtest~Focus~frank~ioCheck~09/01/1989~23/11/2013~true~d~1995 

그것은 지금 구문 분석을 쉽게

public class VehicleFactory { 
    private static final VehicleFactory INSTANCE= new VehicleFactory(); 

    private VehicleFactory() {} 

    public static VehicleFactory getInstance() { return INSTANCE; } 

    public static Vehicle createVehicle(String data) { 
     Vehicle value = null; 
     String [] tokens = data.split("~"); 
     if ((tokens != null) && (tokens.length > X)) { 
      // Map String to int or Date here 
      value = new Vehicle(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5]); 
     } 
     return value; 
    } 

    public static List<Vehicle> createVehicles(File f) { 
     List<Vehicle> values = new ArrayList<Vehicle>(); 
     // implementation left for you 
     return values; 
    } 
} 
+0

불행히도이 작업에는 XML 또는 JSON을 사용할 수 없습니다. 탈회자를 바꾸는 것은 내가 고려해 봤지만 어떻게해야하는지에 대해 확신하지 못했습니다. 감사합니다. 이것은 훨씬 잘 작동합니다. 이제는 객체 생성에 대한 작업 만하면됩니다. –

+0

도움이 된 것을 기쁘게 생각합니다. 한 줄을 파싱하고 Vehicle과 다른 파일을 읽고 List를 반환하는 메서드를 작성하는 것이 좋습니다. . – duffymo

0

readLine()과 일치하는 문자가\n 일 때 줄을 끝냅니다. 대부분의 텍스트 편집기에서 이것은 개행입니다. 자바 문자열에서 줄 바꿈을 표현하기 위해 소스 코드에 \n를 사용하지만 손으로 ​​사용하여 파일을 만들 때 :

Fordtest 
Focus 
frank 
ioCheck 
09/01/1989 
23/11/2013 
true 
d1995 
+0

덕분에, 내가 한 이 값을 사용해보십시오. 그러나 콘솔에 출력 할 때 몇몇 값은 서로 옆에 있습니다. 메모장이 여백을 어떻게 든 숨기고 있었기 때문에 (즉, 두 단어가 서로 옆에있을 때 내가 백 스페이스를 누르면 조인 할 수 있었고 다시 누르면 다시 바뀌지 않을 것이기 때문에) –