JAVA读取文件 排序 写出文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA读取文件 排序 写出文件相关的知识,希望对你有一定的参考价值。
读取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
楼主看一下希望有帮助吧
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;
参考技术A 用IO里面的类来读取文件,把读取出来的文件一行一行的放进list,然后遍历出来,把字符串按照一定的要求去拆分,然后排序.就OK了 参考技术B 你按行读取文件
然后用spriXX什么的分割字符串。 吧后面的转换为数字
拿个数做sum。后面的循环相加。
前面的字符串 和数字放到一起 放到list里面然后循环排序。。怎么排你自己写了
最后添加你最后的那个字符串。
用stringBuffer .. 参考技术C 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之间要空一格 参考技术D 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了,记得给分哟
Java字节流读取写出文件
操作非文本文件 图片视频等等
public class Test13 {
public static void main(String[] args) {
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
//输入流
try {
//参数传入文件位置
inputStream = new FileInputStream("D://作业.png");
//输出流
outputStream = new FileOutputStream("D://作业副本.png");
//复制的过程
byte[] bytes = new byte[1024];
int len;
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行测试
文本文件
FileInputStream inputStream=null;
try {
inputStream = new FileInputStream("D://1.txt");
byte[] bytes = new byte[1024];
//记录每次读取的字节个数
int len;
while ((len=inputStream.read(bytes))!=-1){
String str = new String(bytes, 0, len);
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以上是关于JAVA读取文件 排序 写出文件的主要内容,如果未能解决你的问题,请参考以下文章