2011-02-25 58 views
1

目前我创建一个Java应用程序,没有数据库所需 就是为什么我使用的文本文件,使其 文件的结构是这样的如何与Java读取和更新行文件

unique6id username identitynumber point 

unique6id username identitynumber point 

可我知道我怎么能读取并找到匹配unique6id然后更新相应的行的点?

对不起,缺乏信息 ,这里是我键入部分

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(); 

这是我在数据 文本的方式则内部DATA.TXT结果

spencerlim 900419129876 448505 0 
Eugene 900419081234 586026 0 

当用户输入586026时,它会抓取一排eugene 绑定到Cust 并更新pts(在这种情况下为0,尝试将其更新为其他编号,例如30)

Thx for reply = D

+1

发布到目前为止,以及您的结果。它会帮助人们更好地帮助你! – corsiKa 2011-02-25 15:58:51

+0

对不起,因为缺乏细节,希望得到正确的答案,对于这种情况= D – 1myb 2011-02-25 17:07:24

回答

3

阅读非常简单,但在原地更新文本文件(即不重写整个文件)非常尴尬。

所以,你有两个选择:

  1. 阅读整个文件,进行更改,然后写整个文件到硬盘,覆盖旧版本;这很容易,对于小文件来说足够快,但对于非常大的文件来说不是一个好主意。

  2. 使用不是简单文本文件的格式。数据库将是一种选择(并且要记住,JDK中内置了一个Derby);还有其他一些方法可以在磁盘上保存简单的键值存储(如HashMap,但存在于文件中),但JDK中并没有内置任何内容。

+0

认真,该死的很难玩文本文件...无论如何〜我请求讲师在本作业中使用数据库的许可,Thx = D – 1myb 2011-02-26 01:14:22

+2

@Spencer Lim:好。告诉他我们告诉过你使用了一个数据库,如果他不让你,我们会绕过去做他。 – 2011-02-26 15:54:35

+1

问她,事实是她不知道如何这就是为什么她告诉我们使用文件流XD,现在,我的应用程序成功与数据库= D – 1myb 2011-03-06 07:34:02

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(S)和阅读器(S)读取文件。 这里是显示如何读取文件的代码片段。

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写入文件。虽然您可以使用随机访问文件,即写入文件的特定位置,但我不建议您这样做。每次你必须写一些东西时,更简单和可靠的方法是创建新文件。我知道这可能不是最有效的方法,但由于某些原因,您不想使用数据库...如果您必须相对经常地保存和更新部分信息并执行搜索,我建议您使用D B。有非常轻量级的实现,包括纯Java实现(例如h2:http://www.h2database.com/html/main.html)。