实现从txt文本读取数组并对其进行排序并写入本地文本。
package com.wjl.study.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* java文件读写
*/
public class FileOperation {
public static void main(String[] args) {
FileOperation fileOperation = new FileOperation();
String readPath = "D:\\myprogram\\array.txt";
String savePath = "D:\\myprogram\\shortarray.txt";
int[] array = fileOperation.readFile(readPath);
fileOperation.sort(array, true);
System.out.println(Arrays.toString(array));
String str = Arrays.toString(array);
fileOperation.writeFile(str, savePath);
}
/**
* 根据路径读取文件
* @param readPath 读文件的路径
* @return
*/
public int[] readFile(String readPath) {
try {
int[] array = null;
// 1.首先获得文件句柄
File file = new File(readPath);
// 2.获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
if (file.isFile() && file.exists()) {// 判断是否为文件,文件是否存在
// 将文件内容读入到内存当中
FileInputStream fis = new FileInputStream(file);
// InputStreamReader()这个方法进行解读刚才装进来内存当中的数据
InputStreamReader read = new InputStreamReader(fis);
// 3.解读完成后转换成IO可以识别的数据:调用字节码读取的方法BufferedReader()。
BufferedReader bufferedReader = new BufferedReader(read);
// 4.使用bufferedReader()的readline()方法读取txt文件中的数据。
String lineTxt = null;
List<Integer> values = new ArrayList<Integer>();
while ((lineTxt = bufferedReader.readLine()) != null) {
String[] vStrs = lineTxt.split(",");
for (String str : vStrs) {
values.add(Integer.valueOf(str.trim()));
}
}
array = new int[values.size()];
int i = 0;
for (Integer v : values) {
array[i++] = v;
}
System.out.println(Arrays.toString(array));
read.close();
} else {
System.out.println("找不到指定的文件");
}
return array;
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
return null;
}
}
/**
*
* @param str 要保存的内容
* @param savePath 要保存的路径
*/
public void writeFile(String str, String savePath) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(savePath));
bw.write(str);
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void sort(int[] array, final boolean ase) {
int temp = 0;
// 最多进行n-1趟排序
for (int i = 0; i < array.length; i++) {
// 对乱序空间[0-array.length-i-1],
for (int j = 0; j < array.length - i - 1; j++) {
if ((ase && array[j] > array[j + 1])
|| (!ase && array[j] < array[j + 1])) {
// 数据交换,一杯水和一油通过空瓶子交换
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}