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,很简单,文件夹路径自己得改一下,否则找不到文件。