當前位置:首頁 » 編程語言 » java文件排序

java文件排序

發布時間: 2022-03-04 02:49:21

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));
}
}
}

熱點內容
hill密碼的加密 發布:2025-01-12 09:56:33 瀏覽:613
組卷源碼 發布:2025-01-12 09:51:12 瀏覽:995
java文件夾改名 發布:2025-01-12 09:49:01 瀏覽:115
腳本函數未定義 發布:2025-01-12 09:39:44 瀏覽:635
頁面PHP 發布:2025-01-12 09:38:07 瀏覽:200
郵政銀行打電話登錄密碼是什麼 發布:2025-01-12 09:37:27 瀏覽:563
linuxroot遠程登錄 發布:2025-01-12 09:37:26 瀏覽:302
怎麼算伺服器ip 發布:2025-01-12 08:59:19 瀏覽:854
安卓與ios哪個適合做主力機 發布:2025-01-12 08:54:11 瀏覽:341
微軟怎麼關閉配置更新 發布:2025-01-12 08:34:23 瀏覽:316