2015-12-05 36 views
0

我正在製作一個類,用於從好奇心中搜索缺少的文件(IE:test-1.txt test-2.txt test-4.txt),當我最終得到它時工作,我意識到我不知道如何檢查缺失的文件後,發現一個失蹤。問題是,我用來詢問文件序列中的哪個數字在發現缺少文件後不工作的計數器,因爲它在那時永久關閉。我認爲可能會起作用的是詢問當前aFile.getName()的結尾是什麼,並將它作爲int分配給我,而不管它可能不是一個數字(實際的計數器是什麼字符串並放在檢查的內容上)。 Appearently不工作,並給了我:文件名檢查

Exception in thread "main" java.lang.NumberFormatException: For input string: "t" 
 
\t at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
 
\t at java.lang.Integer.parseInt(Integer.java:580) 
 
\t at java.lang.Integer.parseInt(Integer.java:615) 
 
\t 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 { 
 
\t public static void main(String[] args) { 
 
\t \t int i = 0; 
 
\t \t //Start Dialogue 
 
\t \t String userDefinedFilePath = JOptionPane.showInputDialog("Please input directory"); //File dir 
 
\t \t String userDefinedFileName = JOptionPane.showInputDialog("Please input file name"); //File extension 
 
\t \t String userDefinedFileType = JOptionPane.showInputDialog("Please input group extension"); //File name 
 
\t \t //Start Filter 
 
\t \t FilenameFilter userDefinedFilter = new FilenameFilter() { 
 
\t \t \t public boolean accept(File file, String name) { 
 
\t \t \t \t if (name.endsWith(userDefinedFileType)) { 
 
\t \t \t \t \t return true; 
 
\t \t \t \t } else { 
 
\t \t \t \t \t return false; 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t }; 
 
\t \t //Start Array 
 
\t \t File dir = new File(userDefinedFilePath); 
 
\t \t File[] files = dir.listFiles(userDefinedFilter); 
 
\t \t //Check for files matching description 
 
\t \t if (files.length == 0) { 
 
\t \t \t System.out.println("The directory doesn't contains any matching files. Please check the directory, extension, and name specified below for accuracy."); 
 
\t \t \t System.out.println("Directory Specified: " + userDefinedFilePath); 
 
\t \t \t System.out.println("Extension Specified: " + userDefinedFileType); 
 
\t \t \t System.out.println("Group Name Specified: " + userDefinedFileName); 
 
\t \t } else { 
 
\t \t \t //Check files for gaps in sequence 
 
\t \t \t for (File aFile: files) { 
 
\t \t \t \t String counter = Integer.toString(i); 
 
\t \t \t \t String check = userDefinedFileName + "-" + counter + userDefinedFileType; 
 
\t \t \t \t if (aFile.getName().equals(check)) { 
 
\t \t \t \t \t System.out.println("File: " + aFile.getName() + " is present."); 
 
\t \t \t \t \t i++; 
 
\t \t \t \t } else { 
 
\t \t \t \t \t System.out.println("Checked for :" + check); 
 
\t \t \t \t \t System.out.println("What was found: " + aFile.getName()); 
 
\t \t \t \t \t 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 
 
\t \t \t \t \t int resetLength = Integer.parseInt(resetCounter); 
 
\t \t \t \t \t i = resetLength; 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
}

+1

檢查resetCounter返回的是什麼字符串resetCounter = aFile.getName()。substring(aFile.getName().length() - 1);' – Ramanlfc

+0

Ahh right。完全忘了擴展名是返回內容的一部分,而不僅僅是文件名。我可以只問文件擴展名長度,然後減去那個文件,而不是一個呢?有沒有辦法只問擴展的長度?我能想到的唯一方法是構建另一個for循環,通過文件名後退,然後查找第一個時間段以獲得長度。 – Jaskal

+0

完全忘了我有字符串UserDefinedFileType作爲告訴我什麼是擴展名的東西。隊友的歡呼聲! – Jaskal

回答

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所以最後一個字母是t1

你可以最後.前或後,第一個獲得數字或發現在文件名中的任何號碼,而不是。我懷疑你想要的號碼是test-10.txt100

你可以做

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

這只是不斷的數字。