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 展开
如: 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 展开
7个回答
展开全部
我特意写的规范了一些
楼主看一下希望有帮助吧
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;
}
}
楼主看一下希望有帮助吧
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;
}
}
展开全部
用IO里面的类来读取文件,把读取出来的文件一行一行的放进list,然后遍历出来,把字符串按照一定的要求去拆分,然后排序.就OK了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你按行读取文件
然后用spriXX什么的分割字符串。 吧后面的转换为数字
拿个数做sum。后面的循环相加。
前面的字符串 和数字放到一起 放到list里面然后循环排序。。怎么排你自己写了
最后添加你最后的那个字符串。
用stringBuffer ..
然后用spriXX什么的分割字符串。 吧后面的转换为数字
拿个数做sum。后面的循环相加。
前面的字符串 和数字放到一起 放到list里面然后循环排序。。怎么排你自己写了
最后添加你最后的那个字符串。
用stringBuffer ..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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之间要空一格
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之间要空一格
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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了,记得给分哟
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了,记得给分哟
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询