不管是文本文件还是二进制文件,读写(和编辑)一个文件的最佳方法是什么?如果我要编辑一个文件,我应该把所有的内容读到一个数组列表中,然后编辑数组列表中的内容,再从数组列表中写回文件?或者如果我要写新的内容到一个文件中,我是否应该先把所有的内容都写到一个数组中,然后再把数组写到文件中?还是直接写到文件中,再从文件中写出来就可以了?最好的做法是什么?
当从一个文本文件中读取时,我建议使用java.util.scanner来解析文件。这个输入可以被放入一个字符串或一个ArrayList中,并可以从那里进行编辑。另外,你也可以使用java.io.BufferedReader和java.io.BufferedWriter来读写一个文件,就像这样。
try {
File file = new File("file.txt");
file.createNewFile();
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
(然后用bufferedWriter做任何你想做的事情来改变文件--或
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fr);
String str = bufferedReader.readLine();
如果你是在java7(Java8导致流:D)或更高版本上工作,如果你不是(你应该认真考虑使用)尝试使用Files类来打开文件作为输入流使用方法
Files.newInputStream(Paths.get("your_string_file_path"))
这是一个打开文件然后从文件中读取的好方法:D但由于这将返回一个输入流,你应该考虑使用try-with-resources来使用类似这样的东西。
try(InputStream is = Files.newInputStream(Paths.get("your_string_file_path")){
//do something here to consumer the inputStream;
//from inputstream you can actually read the bytes and do something meaningful
//incase this is
}
你也可以做打开一个文件,你要写到你可能想使用和Files.newOutputStream检查更多关于这里的文件Files.newOutputStream(在这里获得更多细节)但这又是一个流,所以一定要把它包在。
String data= "my name is xyz";
try(OutputStream os = Files.newOutputStream(Paths.get("my_new_file_path"), StandardOpenOption.CREATE_NEW)){
//do something good again
//to write stuff to the file you can then use, this is a really bad example but it works for the demo
os.write(data.getBytes());
}catch (IOException e){
//oops this failed.
//log it perhaps
}