给文件夹中的所有文件编号

wokaoyan1981 2017-11-04 02:17:17
目的:图形下拉列表选择某文件夹路径,将该路径下的所有文件的文件名前加一个编号(从1开始递增);
问题:编号不连续,见附图,少了第3号。

没有找到问题原因及解决办法,请大佬指点。
package com.java24hours;

import javax.swing.*;
import java.awt.*;
import java.io.*;

public class Directory extends JFrame{
static File path;

public Directory(){
super("Please Select Directory:");
setLookAndFeel();
setSize(225,80);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flo=new FlowLayout();
setLayout(flo);
JFileChooser directory=new JFileChooser();
directory.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
directory.showOpenDialog(Directory.this);
path=directory.getSelectedFile();
add(directory);
setVisible(true);
}
private void setLookAndFeel(){
try{
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NImbusLookAndFeel"
);
}catch (Exception exc){
//ignore error
}
}
public static void main(String[] arugments){
int i=1;
new Directory();
File[] contents = path.listFiles();
for(File content:contents){
String name=content.getName();
StringBuilder newName=new StringBuilder();
newName.append(Integer.toString(i));

newName.append("_").append(name);
File newFile=new File(path.toString()+"/"+newName.toString());
content.renameTo(newFile);
i++;
}
System.exit(0);
}
}
...全文
1122 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wokaoyan1981 2017-11-04
发现一个问题,程序把隐藏文件也编号了。这个容易解决。用File类isHidden()方法就可以筛出。貌似还有个bug,.它会生成隐藏文件,这个该怎么处理?
  • 打赏
  • 举报
回复
wokaoyan1981 2017-11-04
这个程序是在完成了《Java入门经典》第21章“读写文件”练习1(即找到一个项目当前所在文件夹里所有的mp3文件,并使用ID3标记信息重命名这些文件)的基础上想出来的。 为了完成它,我从夜里十二点写到凌晨三点钟,也是拼了。 完成时存在一些bug,比如隐藏文件的问题。同时,我发现了《Java入门经典》一处明显错误:书中第239页页未讲File.pathSeparator代表适合任何操作系统的同一路径分隔符,即”/"。在第二版程序上作了实验发现,第45行的”/"若换成File.pathSeparator程序,将偏离原旨,它会在指定文件夹同级路径处生成编号的文件,而不是原处编号。百度了一下,实际上同一路径下的分隔符应该用File.separator。书上明显搞错了。 另外,还发现,File既可以表示文件类,又可表示文件夹类,不要被字面意思迷惑了。强调一下,第二版第20行一定要用getSelectedFile()方法,而不要用getCurrentDirectory()方法,否则又会偏离原旨,删除原来位置的文件夹,移到错误的地方,而原来的文件没有编号。 可能描述得有点乱有点啰嗦。不对的地方欢迎讨论指正。
  • 打赏
  • 举报
回复
wokaoyan1981 2017-11-04
对上面的程序作了修改,筛选出隐藏的文件。
package com.java24hours;

import javax.swing.*;
import java.awt.*;
import java.io.*;

public class Directory extends JFrame{
    
	static File path;
	JFileChooser directory=new JFileChooser();
	public Directory(){
		super("Document number");
		setLookAndFeel();
		setSize(225,80);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		FlowLayout flo=new FlowLayout();
		setLayout(flo);
		directory.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		directory.showOpenDialog(Directory.this);
		path=directory.getSelectedFile();  //important
		add(directory);
		setVisible(true);
	}
	private void setLookAndFeel(){
		try{
			UIManager.setLookAndFeel(
					"com.sun.java.swing.plaf.nimbus.NImbusLookAndFeel"
					);
					}catch (Exception exc){
						//ignore error
					}
	}
   public static void main(String[] arugments){
	   int i=1;
	   new Directory(); 
       File[] contents = path.listFiles();
       for(File content:contents){
    	   if(content.isHidden()){
    		   continue;}else{
    	   String name=content.getName();
    	   StringBuilder newName=new StringBuilder();
    	   String strnumber=""+i;
    	   newName.append(strnumber);  	   
    	   newName.append("_").append(name);
    	   File newFile=new File(path.toString()+"/"+newName.toString());
    	   content.renameTo(newFile);
    	   i++;   
    		   } 
       }
       System.exit(0);
   }
}
剩下最后一个疑问:运行程序后界面没有任何动作提示,只是显示一个下拉列表,让用户不清楚该如何操作。加了JLabel组件仍然无显示。该如何处理?
  • 打赏
  • 举报
回复
相关推荐
发帖
Java
加入

4.8w+

社区成员

Java相关技术讨论
申请成为版主
帖子事件
创建了帖子
2017-11-04 02:17
社区公告
暂无公告