2011-02-25 4 views
1

현재 내가 자바 응용 프로그램을 만들고 어떤 데이터베이스는 텍스트 파일을 사용하여 내가 그것을 를 만들기 위해 왜 파일의 구조는 내가이어떻게 자바 파일을 읽고 업데이트 행에

unique6id username identitynumber point 

unique6id username identitynumber point 

처럼 수 있음을 을 할 필요가 없습니다 어떻게하면 unique6id 매치를 읽고 포인트의 대응하는 행을 업데이트 할 수 있었는지 알 수 있습니까? 여기에 정보 의 부족에 대한 미안하고

내가 입력 한 부분이 내가 데이터 의 텍스트 방식은 다음 데이터 .txt 안에 결과가

spencerlim 900419129876 448505 0 
Eugene 900419081234 586026 0 

입니다

public class Cust{ 
    string name; 
    long idenid, uniqueid; 
    int pts; 
    customer(){} 
    customer(string n,long ide, long uni, int pt){ 
     name = n; 
     idenid = ide; 
     uniqueid = uni; 
     pts = pt; 
    } 


FileWriter fstream = new FileWriter("Data.txt", true); 
      BufferedWriter fbw = new BufferedWriter(fstream); 
       Cust newCust = new Cust(); 

       newCust.name = memUNTF.getText(); 
       newCust.ic = Long.parseLong(memICTF.getText()); 
       newCust.uniqueID = Long.parseLong(memIDTF.getText()); 
       newCust.pts= points; 

      fbw.write(newCust.name + " " + newCust.ic + " " + newCust.uniqueID + " " + newCust.point); 
      fbw.newLine(); 
      fbw.close(); 

입니다 586,026에서 사용자 입력이 다음은 커스트 로 유진 바인드 행 잡아와 PTS를 갱신 할 때 (이 경우에는 0이, 다른 숫자 등으로 업데이트하려고. 30)

답장을위한 Thumb = D

+1

후 지금까지, 그리고 어떤 결과가 무엇인지. 사람들이 당신을 훨씬 더 잘 돕도록 도와 줄 것입니다! – corsiKa

+0

세부 사항이 부족하여 죄송합니다.이 케이스의 정답은 D – 1myb

답변

3

읽기는 매우 간단하지만 (전체 파일을 다시 작성하지 않고 예) 현재 위치에서 텍스트 파일을 업데이트하는 것은 매우 어색하다.

그래서, 당신은 두 가지 옵션이 있습니다

  1. 는 전체 파일을 읽기 원하는대로 변경 한 다음 이전 버전을 덮어 디스크에 전체 파일을 쓰기; 이것은 매우 쉽고 작은 파일에는 충분히 빠르지 만 매우 큰 파일에는 적합하지 않습니다.

  2. 간단한 텍스트 파일이 아닌 형식을 사용하십시오. 데이터베이스가 하나의 옵션이 될 것입니다 (JDK에 내장 된 Derby가 있음을 명심하십시오). HashMap과 같은 간단한 키 - 값 저장소를 디스크에 보관하는 다른 방법이 있지만 파일에는 없지만 JDK에는 아무것도 내장되어 있지 않습니다.

+0

입니다. 텍스트 파일로 놀기가 힘듭니다 ...어쨌든 ~ 나는이 과제에서 데이터베이스를 사용하는 강사의 허락을 요청합니다. Thx = D – 1myb

+2

@Spencer Lim : 좋습니다. 우리가 당신에게 데이터베이스 사용을 말했다고 말하면, 그가 당신을시키지 않으면, 우리는 돌아 서서 그를 끝낼 것입니다. –

+1

그녀에게 묻고, 진실은 그녀가 어떻게 파일 스트림 XD를 사용하라고 지시하는지, 그리고 지금은 데이터베이스와 함께 작동하는 응용 프로그램의 성공 여부를 모르는 것입니다. D – 1myb

2

OpenCSV with custom separators을 사용할 수 있습니다.

public static void updateUserInfo(
    String userId, // user id 
    String[] values // new values 
) throws IOException{ 
    String fileName = "yourfile.txt.csv"; 
    CSVReader reader = new CSVReader(new FileReader(fileName), ' '); 
    List<String[]> lines = reader.readAll(); 
    Iterator<String[]> iterator = lines.iterator(); 
    while(iterator.hasNext()){ 
     String[] items = (String[]) iterator.next(); 
     if(items[0].equals(userId)){ 
      for(int i = 0; i < values.length; i++){ 
       String value = values[i]; 
       if(value!=null){ 
        // for every array value that's not null, 
        // update the corresponding field 
        items[i+1]=value; 
       } 
      } 
      break; 
     } 
    } 
    new CSVWriter(new FileWriter(fileName), ' ').writeAll(lines); 
} 
1

사용되는 InputStream (들)와 리더 (들) 파일을 읽을 수 :

여기에 지정된 사용자에 대한 정보를 업데이트하는 샘플 방법입니다. 다음은 파일을 읽는 방법을 보여주는 코드 조각입니다.

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("c:/myfile.txt"))); 

String line = null; 

while ((line = reader.readLine()) != null) { 
    // do something with the line. 
} 

파일에 쓰려면 OutputStream과 Writer를 사용하십시오. 무작위 액세스 파일을 사용할 수는 있지만 파일의 특정 위치에 쓰는 것은 권장하지 않습니다. 훨씬 쉽고 강력한 방법은 무언가를 써야 할 때마다 새 파일을 만드는 것입니다. 나는 그것이 아마도 가장 효율적인 방법은 아니지만, 어떤 이유로 DB를 사용하고 싶지는 않다는 것을 알고 있습니다 ... 부분적으로 정보를 비교적 자주 저장하고 업데이트하고 파일을 검색해야한다면 DB. 순수 자바 구현 (예 : h2 : http://www.h2database.com/html/main.html)을 포함하여 매우 가벼운 구현이 있습니다.

관련 문제