模拟:先创建一个TXT文件(内容来自控制台);然后读取文件并在控制台输出;最后实现对新创建的TXT文件(的数据进行排序后)的复制。分别对应三个函数,调用顺序需要注意:创建、读取、复制。
效果图如下:绿色部分为控制台输入的内容(当输入end时,结束)
代码如下:
package?com.baidu;import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.FileReader;
import?java.io.IOException;
import?java.io.OutputStreamWriter;
import?java.util.Arrays;
import?java.util.Scanner;
import?java.util.Vector;
public?class?CreateAndReadTxt?{
//?文件名称
public?static?String?fileName?=?".txt";
public?static?String?newFileName?=?".txt";
//?文件路径
public?final?static?String?URL?=?System.getProperty("user.dir");
//?CreateAndReadTxt.class.getResource("/").getPath();
//?创建TXT文件
public?static?void?createTxtFile(String?fName,?String?fileContent)?{
//?创建文件
fileName?=?fName?+?fileName;
File?file?=?new?File(fileName);
//?可以更改
file.setWritable(true);
//?判断当前路径下是否存在同名文件
boolean?isExist?=?file.exists();
if?(isExist)?{
//?文件存在,删除
file.delete();
}
//?写入文件
try?{
//?文件写入对象
FileOutputStream?fos?=?new?FileOutputStream(file);
//?输入流写入----默认字符为GBK
OutputStreamWriter?osw?=?new?OutputStreamWriter(fos);
//?写入
osw.write(fileContent);
//?写入完毕后关闭
osw.close();
System.out.println("成功创建文件:\t"+fileName);
}?catch?(IOException?e)?{
System.out.println("写入文件失败:\t"?+?e.getMessage());
}
}
//?阅读文件
public?static?void?readFile(String?fileName)?{
System.out.println("开始读取文件:\t"?+?fileName);
//?产生文件对象
File?file?=?new?File(fileName);
//
try?{
//?字符读取
FileReader?fr?=?new?FileReader(file);
//?缓冲处理
BufferedReader?br?=?new?BufferedReader(fr);
String?str?=?"";
while?((str?=?br.readLine())?!=?null)?{
System.out.println(str);
}
//?关闭
br.close();
fr.close();
}?catch?(FileNotFoundException?e)?{
System.out.println("读取文件失败:\t"?+?e.getMessage());
}?catch?(IOException?e)?{
System.out.println("读取文件失败:\t"?+?e.getMessage());
}
}
//?文件复制
public?static?void?copyFile(String?fromFileName,String?toFileName){
//读取文件
File?file?=?new?File(fromFileName);
try?{
FileReader?fr?=?new?FileReader(file);
BufferedReader?br?=?new?BufferedReader(fr);
//?定义接收变量
Vector<Double>?vec?=?new?Vector<Double>();
String?s?=?"";
while(null!=(s=br.readLine())){
vec.add(Double.parseDouble(s));
}
br.close();
fr.close();
//?保存到数组并进行排序
Double?dou[]?=?new?Double[vec.size()];
vec.toArray(dou);
Arrays.sort(dou);
System.out.println("========复制文件=========");
//?写入新文件
newFileName?=?"副本"+newFileName;
File?newFile?=?new?File(toFileName);
FileOutputStream?fos?=?new?FileOutputStream(newFile,?true);
OutputStreamWriter?osm?=?new?OutputStreamWriter(fos);
for(Double?d:dou){
osm.write(d.doubleValue()+"\n");
}
osm.close();
fos.close();
}?catch?(FileNotFoundException?e)?{
System.out.println("读取文件失败:\t"?+?e.getMessage());
}?catch?(IOException?e)?{
System.out.println("读取文件失败:\t"?+?e.getMessage());
}
}
public?static?void?main(String[]?args)?{
/**
?*?构造数据
?*/
Scanner?scan?=?new?Scanner(System.in);
StringBuilder?sb?=?new?StringBuilder();
String?s?=?"";
while(!("end".equals(s?=?scan.next()))){//?当输入end时,结束
sb.append(s);
sb.append("\n");
}
scan.close();
/**
?*?使用数据
?*/
CreateAndReadTxt.createTxtFile("creat",?sb.toString());
CreateAndReadTxt.readFile(fileName);
System.out.println(fileName);
CreateAndReadTxt.copyFile(fileName,?newFileName);
CreateAndReadTxt.readFile(newFileName);
}
}