2009-11-23 15 views
0

어떤 방법 으로든이 작업을 쉽게 수행 할 수 있습니까 ?? 내가 사용텍스트 파일 가져 오기

 
name 
phone 
mobile 
address 

:

public void importContacts() { 
    try { 
     BufferedReader infoReader = new BufferedReader(new FileReader(
       "../files/example.txt")); 
     int i = 0; 
     String loadContacts; 

     while ((loadContacts = infoReader.readLine()) != null) { 
      temp.add(loadContacts); 
      i++; 
     } 

     int a = 0; 
     int b = 0; 

     for (a = 0, b = 0; a < temp.size(); a++, b++) { 
      if (b == 4) { 
       b = 0; 
      } 

      if (b == 0) { 
       Name.add(temp.get(a)); 
      } 

      if (b == 1) { 
       Phone.add(temp.get(a)); 
      } 

      if (b == 2) { 
       Mobile.add(temp.get(a)); 
      } 

      if (b == 3) { 
       Address.add(temp.get(a)); 
      } 
     } 
    } 

    catch (IOException ioe) { 
     JOptionPane.showMessageDialog(null, ioe.getMessage()); 

    } 

    txtName.setText(Name.get(index)); 
    txtPhone.setText(Phone.get(index)); 
    txtMobile.setText(Mobile.get(index)); 
    txtAddress.setText(Address.get(index)); 

} 

쉬운 방법들이있다

은 내가 네 줄 수있는 파일을 가져올려고? 오래 기다린 것 같습니다!

+0

이다 심플 끝나는 속성 파일 (ResourceBundle 참조)로 판독 그는'infoReader.close()'! –

+0

변수 i를 제거 할 수 있습니다. 어디서나 참조 (읽기)하지 않는 것 같습니다. –

답변

-1

왜 그냥 :

Driver Class: 
    readInFromFile 

EntityClass 
    EntityClass(String) < calls the parse method 
    get[data elements] 
    parseFromString(String info) <- this is responsible for all of your reading 

은 "readFromFile"방법으로 켜집니다이 도움이

public String readLine(BufferedReader pReader) { 
    try { 
     return pReader.readLine(); 
    } catch(IOException IOE) { 
     /* Not a very good practice but let say "We don't care!" */ 
     // Return null if the line is not there (like there was no 4 lines in the file) 
     return null; 
    } 
} 

public void importContacts() { 
    try { 
     BufferedReader infoReader = new BufferedReader(new FileReader("../files/example.txt")); 
     txtName .setText(readLine(infoReader)); 
     txtPhone .setText(readLine(infoReader)); 
     txtMobile .setText(readLine(infoReader)); 
     txtAddress.setText(readLine(infoReader)); 
    } catch (IOException ioe) { 
     JOptionPane.showMessageDialog(null, ioe.getMessage()); 
    } 
} 

희망을.

+0

나는 예외를 readLine에 던지고 private으로 만듭니다. 당신은 importContacts에서만 그것을 사용하고 어쨌든 예외를 잡을 것입니다! – extraneon

+0

@extraneon : 사실입니다 :-D – NawaMan

1

Apache Fileutils readFileToString() 또는 readLines()는 코드를 더 깨끗하게 만듭니다.

import org.apache.commons.io.FileUtils; 

    ... 


    File file = new File("foobar.txt"); 

    try 
    { 
     List<String> data = FileUtils.readLines(file); 

     // Iterate the result to print each line of the file. 
     Iterator<String> iter = data.iterator(); 
     while(iter.hasNext()) { 
      Name.add(iter.next()); 
      if (iter.hasNext()) { 
       Phone.add(iter.next()); 
      } 
      if (iter.hasNext()) { 
       Mobile.add(iter.next()); 
      } 
      if (iter.hasNext()) { 
       Address.add(iter.next()); 
      } 
     } 

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

심지어

if (iter.hasNext()) Phone.add(iter.next()); 

같은 구성을 사용하여 조금 짧게 만들 수 있지만, 개인적으로는 중괄호를 폐기하는 수 있다고 생각 코드를 더 오류가 발생하기 쉬운. 그래도 한 줄에 넣을 수 있습니다.

+0

가져 오기 선을 넣을 때 오류가 발생합니다. 프로그램 이름을 FileUtils라고 말하면 어디입니까? 나는 정말로이 자바 말라 키를 이해하지 못한다! 그것은 system.out을 말한다.println, 어떻게 Jtextfields 텍스트를 얻을 ?? 감사합니다. – addiosamigo

+0

해당 가져 오기 줄을 사용하려면 클래스 패스에 Apache Commons IO JAR 파일이 있어야합니다. 외부 기능을 가져오고 있습니다. –

+0

Apache Fileutils를 다운로드하여 클래스 경로에 넣어야합니다. – extraneon

0

데이터 집합을 나타내는 데이터 개체를 만듭니다. 새 객체를 사용하여 문자열을 가져 와서 새 객체에서 로컬로 파싱합니다.

.... 
while ((String line= reader.readLine) != null) { 
    list.add(new Entity(line)); 
} 
+0

이것은 나를위한 외계인 언어 같다! 나는 그것을 얻지 않는다! 당신은 나를 위해 그것을 바보로 바꿔 줄 수 있습니까? 감사합니다. – addiosamigo

+0

저는 주로 두 클래스의 구조를 설명합니다. – monksy

0
BufferedReader infoReader = new BufferedReader(new FileReader("../files/example.txt")); 

    String loadContacts; 
    List<People> list = new ArrayList<People>(); 

    while ((loadContacts = infoReader.readLine()) != null) { 
     String[] singleContact = loadContacts.split(REGEXP_FOR_SPLIT_VALUES); 
     People p = new People(); 
     p.setName(singleContact[0]); 
     p.setPhone(singleContact[1]); 
     p.setMobile(singleContact[2]); 
     p.setAddress(singleContact[3]); 
     list.add(p); 
    } 
2

스캐너 클래스를 사용할 수 있습니다.

Scanner s = new Scanner(new File("input.txt")); 
name = s.nextLine(); 
phone = s.nextLine(); 
mobile = s.nextLine(); 
address = s.nextLine(); 
0

어때?

while(infoReader.hasNext()) { 
    Name.add(infoReader.readLine()); 
    Phone.add(infoReader.readLine()); 
    Mobile.add(infoReader.readLine()); 
    Address.add(infoReader.readLine()); 
} 

비록 Name, Phone 등의 클래스를 하나의 연락처를 나타내는 클래스로 변경하는 것을 선호하지만 말입니다.

0

다음은 새로운 스캐너 클래스를 사용하여 쉽게 읽고 IOException을 처리하고, ClassLoader를 사용하여 파일을 찾고, 간단한 @Data 클래스를 사용하여 데이터를 저장하는 방법입니다.

public void importContacts() { 
    Scanner scanner = new Scanner(ClassLoader.getSystemClassLoader().getResourceAsStream("example.txt")); 
    List<Contact> list = Lists.newArrayList(); 
    while(scanner.hasNext()) { 
     list.add(new Contact(
      scanner.nextLine(), 
      scanner.nextLine(), 
      scanner.nextLine(), 
      scanner.nextLine() 
     )); 
    } 

    Contact c = list.get(index); 
    txtName.setText(c.getName()); 
    txtAddress.setText(c.getAddress()); 
    txtPhone.setText(c.getPhone()); 
    txtMobile.setText(c.getMobile()); 
} 

private static @Data class Contact { 
    private final String name, phone, mobile, address; 
} 
0

파일이 오직 하나의 접촉을 포함하고 소스 텍스트 파일의 형식을 제어 할 경우 다시 포맷 할 수있는 특성 파일처럼 :

name=value

그럼 당신은 좋겠 t는

Mobile.add(properties.getProperty("mobile"))

+0

시작 부분에 네 줄이 없지만 더 많은 연락처를 추가하면 더 많이 될 것입니다. 덕분에 – addiosamigo

+0

다른 사용자가 제안한대로 BufferedReader.readLine() 또는 Scanner.nextLine()을 사용하는 것이 좋습니다. – spork