如何在特定文件位置附加和更改数据

时间:2015-11-24 23:35:15

标签: java file io text-files

晚上好堆栈溢出!我正在开发一个类似于Windows Access Control列表的项目,并遇到了一个问题。我需要使用文件来跟踪谁在哪个组中,例如,在我的文件中,我希望有这个:

  • 管理员:admin,mike
  • 用户:admin,mike,sarah,eric
  • 会计:莎拉,埃里克

我只是简单地将数据添加到列表中,所以它更像是这样:

  • 管理员:admin
  • 管理员:mike

我还需要能够不按顺序添加内容,例如,如果我将Admin添加到Admins,Sarah添加到Accounting,然后Mike添加到Admins,是否有办法保持所有数据的顺序?< / p>

我想知道如何解决这个问题,将数据附加到特定位置,使其看起来不像火车残骸。

谢谢!

1 个答案:

答案 0 :(得分:0)

您无法将数据直接附加到文件中。您可以使用RandomAccessFile全部阅读并将插入数据更改为特定位置。这是一个很好的教程,如何执行此操作:http://tutorials.jenkov.com/java-io/randomaccessfile.html

下面是如何在内存中加载的文件中插入东西:

// open file for reading and writing
RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");

// go to a certain position
file.seek(200);
// write hello world in ths position
file.write("Hello World".getBytes());

// close file - this should be done in the finally clause
file.close();

但是,我不会遵循这种方法。为什么不把所有东西都放在CSV文件中,用Java读取它们,把内容放到一个列表中,做你想做的任何插入,删除和排序(在那里为字符串排序),然后将文件保存到文件系统又来了吗?

您可以使用OpenCSV来阅读CSV文件,以下是一个示例:

... import java.util.*;

public class ParseCSV {
  public static void main(String[] args) {
    try {
      //csv file containing data
      String strFile = "MyCSvFile.csv";
      CSVReader reader = new CSVReader(new FileReader(strFile));
      String [] nextLine;
      // list holding all elements - they can be later be maniulated
      List<String> elements = new ArrayList<String>();
      while ((nextLine = reader.readNext()) != null) {

        for (int i = 0; i < nextLine.length;i++) {
            elements.add(nextLine[i]);
        }
      }
    }
  }
}

按照这种方法,然后为了在列表的中间或末尾插入元素,需要适当地使用数据结构,最后将它们写入磁盘,如果你使用OpenCSV愿望。