文件名检查

时间:2015-12-05 08:32:29

标签: java arrays search filter filenames

我正在制作一个类,它出于好奇心从我们的序列中搜索丢失的文件(IE:test-1.txt test-2.txt test-4.txt),当我终于让它工作时我意识到我不知道如何在找到丢失的文件后继续检查丢失的文件。问题是,我用来询问文件序列中的哪个数字在找到丢失的文件后不能正常工作,因为它在那时永久关闭。我认为可能会工作的是询问当前aFile.getName()的结尾是什么,并将其作为int分配给i而不管它可能不是一个数字(进入实际计数器的是什么)字符串并放在检查的内容上)。显然那不起作用并给我:



Exception in thread "main" java.lang.NumberFormatException: For input string: "t"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at TestingClass5.main(TestingClass5.java:43)




这是我到目前为止所得到的:



import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import javax.swing.JOptionPane;
public class TestFileSequence {
	public static void main(String[] args) {
		int i = 0;
		//Start Dialogue
		String userDefinedFilePath = JOptionPane.showInputDialog("Please input directory"); //File dir
		String userDefinedFileName = JOptionPane.showInputDialog("Please input file name"); //File extension
		String userDefinedFileType = JOptionPane.showInputDialog("Please input group extension"); //File name
		//Start Filter
		FilenameFilter userDefinedFilter = new FilenameFilter() {
			public boolean accept(File file, String name) {
				if (name.endsWith(userDefinedFileType)) {
					return true;
				} else {
					return false;
				}
			}
		};
		//Start Array
		File dir = new File(userDefinedFilePath);
		File[] files = dir.listFiles(userDefinedFilter);
		//Check for files matching description
		if (files.length == 0) {
			System.out.println("The directory doesn't contains any matching files. Please check the directory, extension, and name specified below for accuracy.");
			System.out.println("Directory Specified: " + userDefinedFilePath);
			System.out.println("Extension Specified: " + userDefinedFileType);
			System.out.println("Group Name Specified: " + userDefinedFileName);
		} else {
			//Check files for gaps in sequence
			for (File aFile: files) {
				String counter = Integer.toString(i);
				String check = userDefinedFileName + "-" + counter + userDefinedFileType;
				if (aFile.getName().equals(check)) {
					System.out.println("File: " + aFile.getName() + " is present.");
					i++;
				} else {
					System.out.println("Checked for :" + check);
					System.out.println("What was found: " + aFile.getName());
					String resetCounter = aFile.getName().substring(aFile.getName().length() - 1); //Assigns string resetCounter to the last character in the current aFile.getName() regardless if it isn't a number 
					int resetLength = Integer.parseInt(resetCounter);
					i = resetLength;
				}
			}
		}
	}
}




1 个答案:

答案 0 :(得分:1)

您正在尝试获取文件名末尾的数字

String resetCounter = aFile.getName().substring(aFile.getName().length() - 1); 
//Assigns string resetCounter to the last character in the current aFile.getName() regardless if it isn't a number 

表示名为test-1.txt的文件,因此最后一个字母为t而不是1

您可以在最后一个.之前或第一个之后获取数字,或者在文件名中找到任何数字。我怀疑你想要这个数字,例如test-10.txt应为10而不是0

你可以做到

String resetCounter = aFile.getName().replaceAll("[^0-9]+", "");

这只保留数字。