2011-11-05 2 views
2

일부 값을 가진 텍스트 파일이 있습니다.생성자 배열로 텍스트 파일 읽기 (java)

textfile data 

line1row1 line1row2 55 
line2row1 line2row2 44 
line3row1 line3row2 33 

나는 생성자를 만든 데이터 클래스가 있습니다. 배열에 들어가는 데이터는 텍스트 파일에서 읽으 려합니다.

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

class Data{ 
    public Data(String entry1, String entry2, int entry3){} 
} 
public class readData { 
    public static void main(String[] args) throws Exception{ 
    BufferedReader inFile = new BufferedReader (new FileReader ("scores.txt")); 

    Data entrydata[] = new Data[3]; //create new constructor array 
    for(int i = 0; i < entrydata.length; i++){ 
      entrydata[i] = inFile.readLine(); 
     } 
    } 
} 

내가 ") (inFile.readLine"에 오류가 ... 데이터를 문자열로 변환 할 수 없습니다 [아래로] 내가 데이터를 하드 코딩 할 수

(여기서 "데이터"클래스를 참조) 하지만 대신

Data entrydata[] = new Data[3]; 
entrydata [0] = new Data("line1row1 ", "line1row2 ", 55); 
entrydata [1] = new Data("line2row1 ", "line2row2 ", 44); 
entrydata [2] = new Data("line3row1 ", "line3row2 ", 33); 

내가 이렇게 할 이유는 내가 배열에 저장된 informatin에 액세스 할 수 있도록하는 파일에서 읽을 수 싶어요.

답변

2

inFile.readline()은 Data 객체가 아니므로 오류 메시지가 표시되는 문자열을 반환합니다. 파일에서 읽은 문자열을 배열로 분할하고 배열 요소를 사용하여 데이터 항목을 만들어야합니다. 같은 뭔가 :

String[] tmp = inFile.readline().split(" "); 
entrydata[i] = new Data(tmp[0], tmp[1], Integer.parseInt(tmp[2])); 
+0

가, 감사합니다! 이제 왜 내가 nullpointerexception (나는 더 많은 값을 추가 할 수 있도록하기 위해 초기 3보다 많은 인덱스가있는 배열을 사용하고 있습니다)을 알아 내야합니다. 또한 내 파일의 첫 번째 줄을 무시하고 두 번째 줄에서 개체를 읽기 시작한 다음 nullpointerexception을 throw합니다. – user1031551

+0

발견 된 위치 : 데이터 입력 데이터 [] = 새 데이터 [3]; for (int i = 0; i user1031551

0

어떻게 파일에서 한 줄의 텍스트를 읽어 readLine 방법은하는 Data 인스턴스에 선을 변환하는 방법을 알고 있을까? 그것은 당신의 마음 속에 읽지 않습니다.

그래서 세 가지 구성 요소로 줄을 변환하는 방법을 말해야합니다. String.split 메서드를 사용하여 모든 공백 문자에서 줄을 분할하고 Integer.parseInt 메서드를 사용하여 세 번째 토큰을 정수로 변환 할 수 있습니다.

또한 코드는 파일에 정확히 3 행이 있다고 가정합니다. 그 경우가 반드시 필요한 경우가 아니라면 다음 행이 null이 될 때까지 반복하고 각 Data 인스턴스를 배열이 아닌 List<Data>에 넣어야합니다. 목록은 자동으로 크기가 커지며 배열은이를 수행 할 수 없습니다.

1

나는 생성자 또는 방법이없는이

class Data{ 
    String entry1, entry2; 
    int entry3; 
    public Data(String[] datas) throws NumberFormatException { 
     entry1 = datas[0]; 
     entry2 = datas[1]; 
     entry3 = Integer.parseInt(datas[2]); 
    } 
} 
    . 
    . 
    . 
    . 
Data entrydata[] = new Data[3]; //this is not a constructor 
for(int i = 0; i < entrydata.length; i++){ 
    entrydata[i] = new Data(inFile.readLine().split(" ")); //this is the constructor 
} 
0

귀하의 readData 클래스처럼 뭔가를 할 woud. 11-15 줄의 코드는 메서드/생성자에 있어야합니다.

각 항목의 길이가 고정되어있는 경우 line.split(...) 대신 line.substring(...)을 시도해보십시오.

클래스 이름은 ReadData이어야합니다.

0

이 코드의 definetly 작동합니다 : 일단 내가 방법을 fugured 일한

FileReader fr =new FileReader("src/FilePractice.txt"); 
BufferedReader in =new BufferedReader(fr); 
String line; 
     while((line = in.readLine()) != null){ 
      String[] arrray=line.split(","); 
      RelationShip r=RelationShip.valueOf(arrray[2]); 
      new Data(arrray[0],arrray[1],r,Integer.parseInt(arrray[3])); 
      System.out.println(arrray[0]+arrray[1]+arrray[2]+arrray[3]);