开发者

How to read and update row in file with Java

currently i creating a java apps and no database required that why i using text file to make it开发者_StackOverflow社区 the structure of file is like this

unique6id username identitynumber point

unique6id username identitynumber point

may i know how could i read and find match unique6id then update the correspond row of point ?

Sorry for lack of information and here is the part i type is

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

this is the way i text in the data then the result inside Data.txt is

spencerlim 900419129876 448505 0
Eugene 900419081234 586026 0

when user type in 586026 then it will grab row of eugene bind into Cust and update the pts (0 in this case, try to update it into other number eg. 30)

Thx for reply =D


Reading is pretty easy, but updating a text file in-place (ie without rewriting the whole file) is very awkward.

So, you have two options:

  1. Read the whole file, make your changes, and then write the whole file to disk, overwriting the old version; this is quite easy, and will be fast enough for small files, but is not a good idea for very large files.

  2. Use a format that is not a simple text file. A database would be one option (and bear in mind that there is one, Derby, built into the JDK); there are other ways of keeping simple key-value stores on disk (like a HashMap, but in a file), but there's nothing built into the JDK.


You can use OpenCSV with custom separators.

Here's a sample method that updates the info for a specified user:

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


Use InputStream(s) and Reader(s) to read file. Here is a code snippet that shows how to read file.

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

String line = null;

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

Use OutputStream and Writer(s) to write to file. Although you can use random access files, i.e. write to the specific place of the file I do not recommend you to do this. Much easier and robust way is to create new file every time you have to write something. I know that it is probably not the most efficient way, but you do not want to use DB for some reasons... If you have to save and update partial information relatively often and perform search into the file I'd recommend you to use DB. There are very light weight implementations including pure java implementations (e.g. h2: http://www.h2database.com/html/main.html).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜