利用BufferedReader按行数读取目标文件,然后利用String的reverse对本行内容翻转,然后将内容存入集合中,以行数为标识。其中如果用String承载读取的行数会浪费内存,用StringBuffered装载。当将文件内容读完后,利用BufferedWriter将集合存储的字符串写入文件,写入顺序是行数倒叙,以实现翻转效果。
可两次调用方法,将文件翻转后还原,即可查看翻转效果,当然,如果有兴趣,可以写个程序判断文件内容是否相等.
public class ReverseText {
public static File file = new File("src/源文件");
public static File reverseFile = new File("src/反转文件");
public static File restoreFile = new File("src/还原文件");
{
try {
if (!reverseFile.exists()) {
reverseFile.createNewFile();
} else {
reverseFile.delete();
reverseFile.createNewFile();
}
if (!restoreFile.exists()) {
restoreFile.createNewFile();
} else {
restoreFile.delete();
restoreFile.createNewFile();
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
/*
* 读取源文件内容,读取的行数用字符串反转方法,接着按行数存入集合,
* 然后倒着遍历将集合内容写入文件
*/
public static void reverseText(File oldFile,File newFile){
try {
long start = System.currentTimeMillis();
//创建集合存储文本内容
Map<Integer, String> map = new HashMap<Integer, String>();
BufferedReader br_File = new BufferedReader(
new InputStreamReader(
new FileInputStream(oldFile)));
BufferedWriter bw_Reverse = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(newFile,true)));
int sum = 0; //读取的行数
StringBuffer sb = new StringBuffer();
String string;
while ((string = br_File.readLine()) != null){
sb.append(string);
sb.reverse();
map.put(sum, sb.toString());
sb.delete(0, sb.length());
sum++;
}
br_File.close();
for(int i = sum-1 ;i>=0;i--){
string = map.get(i);
bw_Reverse.write(string);
bw_Reverse.newLine();
}
bw_Reverse.close();
long time = System.currentTimeMillis() - start;
System.out.println("本次耗费时间:"+time);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
reverseText(file,reverseFile);
reverseText(reverseFile, restoreFile);
System.out.println(file.equals(restoreFile));
}
}