4
回答
java中如何按照顺序获取文件夹内的文件名
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

如何按照顺序读取文件夹内的文件名:

如输出(1.jpg、2.jpg、3.jpg、10.jpg、11.jpg、20.jpg、21.jpg、31.jpg) 


      // 图片 文件夹
		File imgFile = new File(imgFilePath);
			
		// 图片文件夹路径不存在,则创建
		if (!imgFile.exists()) {
			imgFile.mkdirs();
		}else {
			// 存在图片,则直接获取
			String[] list = imgFile.list(); //获取文件夹内的所有文件名
			if(list != null){
					
				//深拷贝  //浅拷贝 Arrays.asList(list)
				for (String name : list) {
					imgURList.add(name); //把文件名放入list里面
				}
					
				// 对 list 排序
				Collections.sort(imgURList);

				
			}
			

// 对 list 排序 Collections.sort(imgURList);

但是输出的是:(1.jpg、10.jpg、11.jpg、2.jpg、20.jpg、21.jpg、3.jpg、31.jpg)

不是我想要的按数字大小来排序的

 

请教大神们,谁做过没有呢??

举报
天涯共明月
发帖于9个月前 4回/614阅

自己再写个严谨些的吧。

Comparator<String> comparator = new Comparator<Integer>() {
    public int compare(String o1, String o2) {
        Integer i1 = Integer.parseInt(o1);
        Integer i2 = Integer.parseInt(o2);
        return i1 > i2 ? 1 : -1;
    }
};

 

public class Test {

    public static void main(String[] args) {

        List<File> imgURList = Arrays.asList(new File("D://img").listFiles());

        Collections.sort(imgURList, new Comparator< File>() {
            @Override
            public int compare(File o1, File o2) {
                if (o1.isDirectory() && o2.isFile())
                    return -1;
                if (o1.isFile() && o2.isDirectory())
                    return 1;

                return getFileName(o1.getName())-getFileName(o2.getName());
            }
        });

        System.out.println(imgURList);
    }

    private static int getFileName(String fileName){
        String temp[] = fileName.split("\\\\");
        return Integer.parseInt(temp[temp.length-1].split("\\.")[0]);
    }

}

 

结果:[D:\img\1.png, D:\img\2.png, D:\img\10.png, D:\img\11.png, D:\img\20.png]

            

                    
                    // 对 list 排序
                    Collections.sort(imgURList,new Comparator<String>(){

                        @Override
                        public int compare(String o1, String o2) {
                            

                            // 获取 文件名 去掉后面的后缀
                            String nameA = o1.split("\\.");
                            String nameB = o2.split("\\.");
                            

                            // 获取文件名的数值
                            int intA = Integer.parseInt(nameA);
                            int intB = Integer.parseInt(nameB);
                            
                            return intA-intB;
                        }
                        
                    });

 

顶部