JAVA读取文件 排序 写出文件

读取TXT文件的格式为:字母数字如:TOM100JACK200BILL50CATHY150然后按照数字大小排序(由大到小)输出TXT文件格式为:JACK200CATHY1... 读取TXT文件的格式为:字母 数字
如: TOM 100
JACK 200
BILL 50
CATHY 150

然后按照数字大小排序(由大到小)
输出TXT文件格式为:
JACK 200
CATHY 150
TOM 100
BILL 50
最后一行输出平均值=总和/人数
如:平均值=(200+150+100+50)/4=125

输出为一个新生成的TXT文件,不改变原文件
如读取文件为test.txt, 输出文件为text1.txt
展开
 我来答
谁能把我捡回家
推荐于2018-04-12 · TA获得超过176个赞
知道答主
回答量:48
采纳率:0%
帮助的人:70.3万
展开全部
我特意写的规范了一些
楼主看一下希望有帮助吧
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;
}
}
glcword
2011-01-25 · 超过25用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:72.7万
展开全部
用IO里面的类来读取文件,把读取出来的文件一行一行的放进list,然后遍历出来,把字符串按照一定的要求去拆分,然后排序.就OK了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
O_Game_Over_O
2011-01-25 · TA获得超过346个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:649万
展开全部
你按行读取文件
然后用spriXX什么的分割字符串。 吧后面的转换为数字
拿个数做sum。后面的循环相加。
前面的字符串 和数字放到一起 放到list里面然后循环排序。。怎么排你自己写了
最后添加你最后的那个字符串。
用stringBuffer ..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
2010xianghui
2011-01-25 · TA获得超过108个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:119万
展开全部
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class TestFileOutPutString {
public static void main(String[] args) throws FileNotFoundException {

FileReader in = new FileReader("d:/test.txt");//写你文件路径
BufferedReader input = new BufferedReader(in);
String s=null;
int sum=0;
ArrayList ss=new ArrayList();
try {
while((s=input.readLine())!=null){
ss.add(s);
sum=sum+Integer.parseInt(s.split(" ")[1]);
}
in.close();
} catch (FileNotFoundException e2) {
System.out.println("找不到指定文件"); System.exit(-1);
} catch (IOException e1) {
System.out.println("错误"); System.exit(-1);
}
Comparator comparator = new Comparator(){
public int compare(Object o1, Object o2){
String b1=(String)o1;
String b2=(String)o2;
return Integer.parseInt(b1.split(" ")[1])-Integer.parseInt(b2.split(" ")[1]);
}
};

Collections.sort(ss,comparator);
Collections.reverse(ss);
for(int i=0;i<ss.size();i++){
System.out.println(ss.get(i));
}
System.out.println("平均值="+sum/4.0);

}
}
文件格式 JACK 200 ,JACK和200之间要空一格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
java_function
2011-01-25 · 超过26用户采纳过TA的回答
知道答主
回答量:144
采纳率:0%
帮助的人:90.9万
展开全部
FileInputStream fis=new FileInputStream("aaa.txt");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
String des=null;
List<String> l=new ArrayList<String>();
while((des=br.readLine())!=null)
{
l.add(des.trim());
}
System.out.println(l);
StringBuffer sb=new StringBuffer();
for(int i=0;i<l.size();i++){
for (int j = i; j <l.size(); j++) {
String d=l.get(i);
int m=Integer.parseInt(d.substring(d.indexOf(" ")).trim());//取出数字
String d2=l.get(j);
int n=Integer.parseInt(d2.substring(d2.indexOf(" ")).trim());//取出数字
String temp="";
if(m<n){
temp=l.get(i);
l.set(i, l.get(j));
l.set(j, temp);
}

}

}

//将排序好的数据重新写回文件
PrintWriter pw=new PrintWriter("aaa.txt");
for (String string : l) {
pw.println(string);
}
pw.flush();
pw.close();
System.out.println("结束");

把上面的代码加入main方法运行就o了,记得给分哟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式