java文件夾排序
Ⅰ 寫java一個程序,它能把你機子上某個文件夾下的所有文件按照文件大小的順序從大到小輸出
如果要按照從小到大,只需要調整那個return -1和return 1得位置即可
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;
public class Apl {
public static void main(String args[]) {
String folderName = "C:\\Documents and Settings\\test\Desktop";//檢測的文件夾
File file = new File(folderName);
if(!file.exists() || !file.isDirectory()){
System.out.println("Error! It's not a directory!");
return;
}
File[] files = file.listFiles(new FileOnlyFilter());
Arrays.sort(files, new FileLengthComparator());
for(File f: files){
System.out.println(f.getName() + " length is: " + f.length());
}
}
}
class FileOnlyFilter implements FileFilter{
public boolean accept(File f) {
if(f.isFile()){
return true;
}
return false;
}
public String getDescription() {
return null;
}
}
class FileLengthComparator implements Comparator<File>{
public int compare(File o1, File o2) {
if(o1.length() < o2.length()){
return 1;
}else if(o1.length() == o2.length()){
return 0;
}else{
return -1;
}
}
}
-----------------------
Calculation.doc length is: 4146176
Design Specs.doc length is: 2550784
v1.1 (final).zip length is: 2163195
v1.1 (final).doc length is: 1527296
esign Specs.doc length is: 186880
Sequence.JPG length is: 51629
tese.JPG length is: 33938
Ⅱ java中的文件名排序問題
arraylist是無序的 就是說取出來的時候不一定會按原來放入的順序給你排好
所以說如果你是以d1----d30的順序插入的話,要想再以這個順序取出來的話 不能用arrayList 改用LinkedHashSet這個類進行數據的插入和取出操作
Ⅲ java實現對樹形結構(文件夾式)數據數組進行排序
這個問題本質上就是個數據結構的問題,所謂排序和查找效率依賴的是演算法和數據結構的配合,你現在定下了鏈表(沒有具體說明的話,這里應該指的是單向鏈表吧)、數組和二叉樹,這幾個之中,那排序和查找的數據就看用什麼演算法和相應的數據結構配合了~~~
排序演算法中,快速排序是最快的,比較適合用鏈表來處理,但是鏈表的查找是比較慢的(雙向鏈表的話可以加快查找速度)。
數組排序會比較慢,不是演算法的問題,而是數組的調整因為需要位移,但是數組一旦排號順序後,查找是很快的——折半查找。
二叉數較為平局,排序可以採用堆排序,查找可以建二叉排序樹來找(用B+或B-樹的話可以更快)。
個人看法,不一定對,歡迎拍磚,具體代碼知道演算法了就自己上網找吧。
Ⅳ java排序文件路徑問題
這個,你可以使用集合的TreeSet實現自然排序啊!
FIle已經有comparable借口並且重寫了compareTo方法,你寫一個繼承file類的新類,並且重寫他的comparTo方法,如果"\"數一樣,則返回0,否則返回自然比較的值即可!把路徑都放進新類里,再把類放進treeset,自然能實現你要的排序。注意這里的"\"是轉義字元,必須寫成"\\"。再詳細的,你可以自己再看看api!
Ⅳ java如何按照文件主題進行文件的分類排序。希望給些代碼和思想。謝謝!
也就是按照文件名進行排序.先用流獲取文件名,然後自己定義個排序方法就行了.
比如有個文件的後綴名是.mp3有個文件後綴名是.jpg.那你就可以定義一個音樂類一個圖片類,然後截取後綴名來比對.如果後綴名是.mp3 .wav等就放進音樂類.
Ⅵ 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.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讀寫文件並排序
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 對文件夾下所有文件按文件大小進行排序,請問哪裡有問題
你通過遞歸得到文件列表,但是你通過重寫compare和equals方法,比較文件大小這個有待商榷,一般文件大小是通過位元組數來判斷的,通用方法為File.length()方法,給你個文件參考一下,沒有package,很簡單,文件夾路徑自己得改一下,否則找不到文件。