该目录有n个文件。我正在创建类,它将使用java arraylist从目录中按大小对文件进行排序。
我可以读取文件名和大小。但是如何按大小对文件进行排序?
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class SortingFiles
{
public static void main(String[] args)
{
File dir=null;
File[] paths;
final ArrayList<String> al= new ArrayList<String>();
try{
// create new file object
dir = new File("D:\\New folder\\New");
// array of files and directory
paths = dir.listFiles();
ArrayList<File> fileList = new ArrayList<File>();
for(File file:paths)
{
// prints filename and directory name
System.out.println(file.getName()+" - " +file.length() );
al.add(file.getName());
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
我试图按大小对文件进行排序
for(int i=1; i<al.size(); i++)
{
System.out.println("\n Aftr : " +al.get(i) );
}
但它不起作用..任何人都可以帮助我..我正在尝试没有&#34;导入org.apache.commons.io.FileUtils;&#34;。那该怎么办?
答案 0 :(得分:2)
在name
中使用(size
,al
)object,然后使用自定义Comparator
排序(或制作此自定义对象Comparable
)使用Collections.sort
。类似的东西:
public class FileData implements Comparable<FileData> {
private final String fileName;
private final long fileSize;
public FileData(final String fileName, final long fileSize) {
this.fileName = fileName;
this.fileSize = fileSize;
}
// getters
@Override
public String toString() {
return (fileName == null ? "" : fileName) + " - " + fileSize;
}
@Override
public int compareTo(FileData other) {
return Long.compare(fileSize, other.fileSize);
}
}
然后:
public class SortingFiles
{
public static void main(String[] args) {
// ...
final List<FileData> al = new ArrayList<FileData>();
// ...
for (final File file: paths) {
final FileData fileData = new FileData(file.getName(), file.length());
System.out.println(fileData);
al.add(fileData);
}
// ...
Collections.sort(al);
// ...
未经测试,甚至未编译(此处输入)
答案 1 :(得分:1)
您必须创建一个String long hashmap,然后将key作为文件名,长度和值,然后使用自然顺序按值对hashmap进行排序。
答案 2 :(得分:0)
我已经完成了。谢谢你的帮助。
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
public class SortingFiles
{
public static void main(String[] args)
{
File dir=null;
File[] paths;
final ArrayList<String> al= new ArrayList<String>();
try{
// create new file object
dir = new File("D:\\New folder\\New");
// array of files and directory
paths = dir.listFiles();
ArrayList<File> fileList = new ArrayList<File>();
class Pair implements Comparable
{
public long t;
public File f;
public Pair(File file)
{
f = file;
t = file.length();
}
public int compareTo(Object o)
{
long u = ((Pair) o).t;
return t < u ? -1 : t == u ? 0 : 1;
}
};
Pair[] pairs = new Pair[paths.length];
for (int i = 0; i < paths.length; i++)
pairs[i] = new Pair(paths[i]);
Arrays.sort(pairs);
// Take the sorted pairs and extract only the file part, discarding the timestamp.
for (int i = 0; i < paths.length; i++)
paths[i] = pairs[i].f;
for(File file:paths)
{
// prints filename and directory name
System.out.println(file.getName()+" - " +file.length() );
al.add(file.getName());
}
//for()
}
catch(Exception e)
{
// if any error occurs
e.printStackTrace();
}
}
}