题目一个文件里面有字符1,2,3,4,5,6,7,8,9等数字,请将其取出并且排序后,写入另外一个文件中
(主要考察文件的操作,读取字符,和写入字符)
package fileSort;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class RWfile {
private static List<String> list=new ArrayList<String>();
public static void main(String[] args){
RWfile rWfile=new RWfile();
rWfile.rFile("E:\\1.txt");
list=rWfile.arrange(RWfile.list);
rWfile.wFile("E:\\2.txt");
}
//读取文件,按每行读取
public void rFile(String file){
String str="";
File myFile=new File(file);
BufferedReader bufferedReader;
try {
bufferedReader = new BufferedReader(new FileReader(myFile));
while((str=bufferedReader.readLine())!= null){
list.add(str);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//写入文件,读取list写入String
public void wFile(String file){
File myFile=new File(file);
//写入文件时候要先判断是否存在文件,没有则创建
if(!myFile.exists()){
try {
myFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
BufferedWriter writer=new BufferedWriter(new FileWriter(myFile));
for(String str:list){
writer.write(str, 0, str.length());
System.out.println(myFile.getPath());
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//处理读取的字符
public List<String> arrange(List<String> list){
List<String> myList=new ArrayList<String>();
for(String s:list){
String[] ss=s.split(",");
int[] num=new int[ss.length];
for(int i=0;i<ss.length;i++){
num[i]=Integer.parseInt(ss[i]);//这里是按照每行的数字排序,可以改成全部
}
sort(num,0,num.length-1);
StringBuffer buffer=new StringBuffer();
int i=0;
for(;i<num.length-1;i++){
buffer.append(num[i]+",");
}
buffer.append(num[i]);
myList.add(buffer.toString());
}
return myList;
}
//排序函数
private void sort(int[] num, int low, int high) {
if(low<high){ //如果不加这个判断递归会无法退出导致堆栈溢出异常
int middle=partition(num,low,high);
sort(num, low, middle-1);
sort(num, middle+1, high);
}
}
//分隔函数
private int partition(int[] num, int low, int high) {
int temp=num[low];
while(low<high){
while(low<high&&num[high]>=temp){
high--;
}
num[low]=num[high];
while(low<high&&num[low]<=temp){
low++;
}
num[high]=num[low];
}
num[low]=temp;
return low;
}
}