晚上好堆栈溢出!我正在开发一个类似于Windows Access Control列表的项目,并遇到了一个问题。我需要使用文件来跟踪谁在哪个组中,例如,在我的文件中,我希望有这个:
我只是简单地将数据添加到列表中,所以它更像是这样:
我还需要能够不按顺序添加内容,例如,如果我将Admin添加到Admins,Sarah添加到Accounting,然后Mike添加到Admins,是否有办法保持所有数据的顺序?< / p>
我想知道如何解决这个问题,将数据附加到特定位置,使其看起来不像火车残骸。
谢谢!
答案 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愿望。