java文件排序
⑴ java读取文件 排序 写出文件
我特意写的规范了一些
楼主看一下希望有帮助吧
12楼写的太混乱了 3楼和我这个异曲同工吧
我建了Sutdent的类和对象 用接口进行了排序 这样方便一点感觉 最好不要用一对字符串当处理的对象 很混乱 组织成对象好些
如果不是遍历 是取出某有个特定下标的值 数组最好不要用数字 用有特殊意义的常量
这样可读性更强些
文件每行是一个记录的 用BufferReader和Writer最恰当 因为有readLine和writeLine方法
用集合类进行管理感觉对这种问题比较合适
这样复用性强一些感觉
还有可以改进的地方 感觉用串行化更好 但要是非输出文本 就这样吧
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Manager {
private BufferedReader input;
private BufferedWriter output;
private ArrayList<Student> students;//存放所有的学生对象的List
//读入文件
public void read() {
students = new ArrayList<Student>();
try {
this.input = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\2.txt"));
String s = new String();
while ((s = input.readLine()) != null) {
String[] nameAndScore = s.split(" ");
this.students.add(new Student(nameAndScore[Student.NAME],
Integer.parseInt(nameAndScore[Student.SCORE])));
}
this.sort();//按分数将学生排序
this.input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//写回文件
public void write() {
try {
this.output = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\3.txt"));
for (Student s : this.students) {
output.write(s.toString(), 0, s.toString().length());
output.newLine();
}
this.output.write(String.valueOf(this.average()), 0, String.valueOf(this.average()).length());//写入平均值
this.output.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//排序
private void sort() {
Collections.sort(this.students, new Comparator<Student>() {
public int compare(Student o1, Student o2) {
return o2.getScore() - o1.getScore();
}
});
}
//求平均值
public float average() {
float average = (float) 0;
for (Student s : this.students) {
average += s.getScore();
}
return average / (this.students.size());
}
public static void main(String[] args) {
Manager m = new Manager();
m.read();
m.write();
}
}
//Student类
class Student {
private String name;
private int score;
public static int NAME = 0;
public static int SCORE = 1;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public int getScore() {
return score;
}
@Override
public String toString() {
return name + " " + score;
}
}
⑵ java 对一个文本文件进行从小到大的排序
@org.junit.Test
publicvoidtest3()throwsException{
BufferedReaderb=newBufferedReader(newInputStreamReader(newFileInputStream(newFile("c:/a.txt"))));
Stringa=null;
Stringtxt="";
while((a=b.readLine())!=null){
txt=txt+a;
}
System.err.println(txt);
String[]txts=txt.split("");
Arrays.sort(txts);
BufferedWriterw=newBufferedWriter(newFileWriter(newFile("c:/a.txt")));
for(Stringstring:txts){
if(string!=null&&!string.equals("")){
w.append(string);
}
//System.err.println(string);
}
w.flush();
//System.err.println(txts.toString());
}
⑶ JAVA 对文件夹下所有文件按文件大小进行排序,请问哪里有问题
你通过递归得到文件列表,但是你通过重写compare和equals方法,比较文件大小这个有待商榷,一般文件大小是通过字节数来判断的,通用方法为File.length()方法,给你个文件参考一下,没有package,很简单,文件夹路径自己得改一下,否则找不到文件。
⑷ java中的文件名排序问题
arraylist是无序的 就是说取出来的时候不一定会按原来放入的顺序给你排好
所以说如果你是以d1----d30的顺序插入的话,要想再以这个顺序取出来的话 不能用arrayList 改用LinkedHashSet这个类进行数据的插入和取出操作
⑸ java读写文件并排序
import java.io.*;
import java.util.*;
import java.lang.*;
import java.util.Scanner;
class Test{
private List<String> name;
private Map<String,Double> balance;
private Map<String,Double> consume;
private Map<String,Double> count;
public List getEmployeeFromBalance(){ //也可以从余额表中获得员工姓名列表
List<String> name=new ArrayList<String>();
Set set=balance.keySet();
Object[] list=set.toArray();
for(int i=0;i<list.length;i++)
name.add((String)list[i]);
this.name=name;
return name;
}
public List readEmployee(String filename)throws Exception{ //读取员工文件
List<String> name=new ArrayList<String>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
for(int i=0;;i++){
if(!read.hasNextLine()) break;
line=read.next();
//if(line==null || line.equals("")) break;
name.add(line);
}
in.close();
this.name=name;
return name;
}
public Map readBalanceFile(String filename)throws Exception{ //读取余额文件
Map<String,Double> map=new HashMap<String,Double>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
String[] sp=null;
Double balance=null;
for(;;){
if(!read.hasNextLine()) break;
line=read.next();
if(line==null || line=="") break;
sp=line.split(",");
balance=Double.valueOf(sp[1]);
map.put(sp[0],balance);
}
in.close();
this.balance=map;
return map;
}
public Map readConsumeFile(String filename)throws Exception{ //读取消费文件
Map<String,Double> map=new HashMap<String,Double>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
String[] sp=null;
Double balance=null;
double temp=0;
for(;;){
if(!read.hasNextLine()) break;
line=read.next();
if(line==null || line.equals("") || line.equals("\n")) break;
sp=line.split(",");
if(map.get(sp[0])!=null){ //解决一人多次消费时Map--key有重复
temp=(Double)(map.get(sp[0])).doubleValue();
temp=temp+Double.valueOf(sp[2]);
balance=Double.valueOf(temp);
temp=0;
}
else balance=Double.valueOf(sp[2]);
map.put(sp[0],balance);
}
in.close();
this.consume=map;
return map;
}
public Map countConsume()throws Exception{ //计算余额
Map<String,Double> count=new HashMap<String,Double>();
double formerly=0,user=0;
for(int i=0;i<name.size();i++){
formerly=Double.parseDouble(balance.get(name.get(i)).toString());
user=Double.parseDouble(consume.get(name.get(i)).toString());
count.put((String)name.get(i),Double.valueOf(formerly-user));
}
this.count=count;
return count;
}
public void writeCountFile(String filename)throws Exception{ //打印结果
File file=new File(filename);
PrintWriter print=new PrintWriter(file);
for(int i=0;i<name.size();i++){
print.print(name.get(i)+",");
print.print(Double.parseDouble(count.get(name.get(i)).toString()));
print.println();
}
print.close();
}
public void writeBalanceZero(String filename)throws Exception{ //将余额为0就打印出来
File file=new File(filename);
PrintWriter print=new PrintWriter(file);
int p=0;
for(int i=0;i<name.size();i++){
if(Double.parseDouble(count.get(name.get(i)).toString())==0){
p++;
print.print(name.get(i)+",");
print.print(Double.parseDouble(count.get(name.get(i)).toString()));
print.println();
}
}
if(p==0) print.println("没有人余额为0");
print.close();
}
static public void main(String[] str)throws Exception{
Test t=new Test();
t.readBalanceFile("1.txt");
t.getEmployeeFromBalance();
t.readConsumeFile("2.txt");
t.countConsume();
t.writeBalanceZero("c.txt");
for(int i=0;i<t.count.size();i++){
System.out.print(t.name.get(i)+",");
System.out.print(t.count.get(t.name.get(i))+"\n");
}
System.out.println("获得结束,结果保存在c.txt");
}
}
///////////////////////////////////
/*
1.txt
王五,1000
李四,2000
张三,3000
2.txt
张三,牛肉面,500
张三,鸡蛋,400
王五,牛肉面,300
张三,牛肉面,400
李四,冷面,600
王五,水煮肉片,100
*/
/////////////////////////////////////
⑹ java排序
importjava.io.File;
importjava.util.Arrays;
importjava.util.Comparator;
publicclassTest{
publicstaticvoidmain(String...args){
File[]files=getFilesOrder(newFile("c:/"));
for(Filef:files){
System.out.println(f.getName());
}
}
privatestaticFile[]getFilesOrder(Filefile){
File[]files=null;
if(file.exists()){
files=file.listFiles();
Arrays.sort(files,getComparator());
}
returnfiles;
}
privatestaticComparator<?superFile>getComparator(){
returnnewComparator<File>(){
@Override
publicintcompare(Fileo1,Fileo2){
if(o1.isDirectory()&&o2.isFile())
return1;
elseif(o2.isDirectory()&&o1.isFile())
return-1;
else
returno1.getName().compareTo(o2.getName());
}
};
}
}
File 可以是 “文件”,也可以是 “目录”,分开比较。
另外用 Comparator 比较方便。
⑺ java如何按照文件主题进行文件的分类排序。希望给些代码和思想。谢谢!
也就是按照文件名进行排序.先用流获取文件名,然后自己定义个排序方法就行了.
比如有个文件的后缀名是.mp3有个文件后缀名是.jpg.那你就可以定义一个音乐类一个图片类,然后截取后缀名来比对.如果后缀名是.mp3 .wav等就放进音乐类.
⑻ JAVA里怎样对指定目录的文件按文件名排序
通过File类的list方法拿到目录下所有的文件名,然后对文件名数组排序
⑼ Java怎么实现Windows文件夹里的排序
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class FileSort {
public static void main(String[] args) {
File file = new File("F:/MerDescription/imp-19038075415690540");
if (file.isDirectory()) { // 判断file是否为目录
String[] fileNames = file.list();
Arrays.sort(fileNames, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if(returnDouble(s1)<returnDouble(s2))
return -1;
else if(returnDouble(s1)>returnDouble(s2))
return 1;
else
return 0;
}
public double returnDouble(String str){
StringBuffer sb = new StringBuffer();
for(int i=0;i<str.length();i++){
if(Character.isDigit(str.charAt(i)))
sb.append(str.charAt(i));
else if(str.charAt(i)=='.'&&i<str.length()-1&&Character.isDigit(str.charAt(i+1)))
sb.append(str.charAt(i));
else break;
}
if(sb.toString().isEmpty())
return 0;
else
return Double.parseDouble(sb.toString());
}
});
for (int i = 0; i < fileNames.length; i++) {
System.out.println(fileNames[i]);
}
}
}
}
⑽ java读取文件并对内容进行排序直接输出结果
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
publicclassTest{
publicstaticvoidmain(String[]args){
Filefile=newFile("data.txt");
List<String>list=newArrayList<>();
try{
BufferedReaderbr=newBufferedReader(newFileReader(file));
while(br.ready()){
list.add(br.readLine());
}
br.close();
}catch(IOExceptione){
e.printStackTrace();
}
for(inti=list.size()-1;i>1;i--){
for(intj=1;j<i;j++){
String[]split1=list.get(j+1).split(" ");
String[]split2=list.get(j).split(" ");
if(split1[1].compareTo(split2[1])>0){
Stringtemp=list.get(j);
list.set(j,list.get(j+1));
list.set(j+1,temp);
}
}
}
for(inti=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}