2014-09-12 2 views
0

Как найти формат файла с помощью Java (предположим, файлы .txt, .java-файлы, .class файлы, .zip-файлы находятся в моем каталоге)?Как найти формат файла с помощью Java (предположим, файлы .txt, .java-файлы, .class файлы, .zip-файлы находятся в моем каталоге)?

Мне нужны только .txt файлы - это решение для тела, это может помочь.

public class a { 
    public static void main(String[] ar) { 
     File f = new File("D:\\") 
     file[] = f.listFiles(); 
     if (file.isFile && file is txt) { 
     } 
    } 
} 
+0

Возможно, вы реализуете функцию isText (файл) и показываете нам, что происходит? –

+0

нет такого метода isText доступен –

+2

, тогда напишите! ОК? –

ответ

2

Использование File#listFiles(FilenameFilter) вместо файла # listFiles():

f.listFiles(new FilenameFilter() { 
      private Pattern pattern = Pattern.compile(".*\\.txt"); 

      @Override 
      public boolean accept(File dir, String name) { 
       return pattern.matcher(name).matches(); 
      } 
     }); 
0

Попробуйте это -

public static String getExtension(File file) { 
     String fileName = file.getName(); 
     int i = fileName.lastIndexOf('.'); 
     if (i > 0) { 
      return fileName.substring(i + 1); 
     } 
     return null; 
    } 

    public static void main(String[] arr) { 
     File f = new File("D:\\"); 
     File files[] = f.listFiles(); 
     for (File file : files) { 
      if (file.isFile()) { 
       if ("txt".equals(getExtension(file))) { 
        System.out.println(file.getName()+" is a text file"); 
       } 
      } 
     } 
    } 
+0

'getExtensions' может возвращать' null', поэтому я бы написал '' txt '.equals (getExtension (file)) 'вместо' getExtension (file) .equals ("txt") ', чтобы предотвратить NPE – msrd0

+0

@ msrd0 Это не будет be null, поскольку я уже проверяю 'if (file.isFile())', и если 'file' является' file', а не 'dir', то он не вернет' null'. –

+0

Да, это будет 'null', если файл не имеет расширения, как это иногда бывает в Linux – msrd0

0

Вы можете использовать File.listFiles(FilenameFilter) для него; например:

File[] files = f.listFiles((File dir, String name) -> name.endsWith(".txt")); 
0

Вы можете попробовать это.

String directory = "c:"; 
File file = new File(directory); 
if (file.isDirectory()) { 
    File[] files = file.listFiles(); 
    System.out.println(files.length); 
    for (File innerFiles : files) { 
     String fileName = innerFiles.getName(); 
     if (fileName.contains(".") && 
       (fileName.substring(fileName.lastIndexOf("."), fileName.length()) 
         .equalsIgnoreCase(".txt")) 
       System.out.println(fileName); 
    } 
} 
1

Если я сделал правильно понял вы хотите найти расширения файлов, вот пример приложения я сделал для вас с помощью поворотного рабочего, теперь вы можете сканировать весь компьютер с определенными расширениями файлов, которые определены в программе в настоящее время она находит html, txt и pdf вы можете это изменить.

Here is the entire project package

enter image description here

Создать Scan рабочий класс, как это ниже, и исправить импорт с помощью IDE

public class ScanWorker extends SwingWorker<Void, String> { 

    ResultFrame helperv; 
    int finalTotal = 0; 
    String str3; 

    public String status; 

    public ScanWorker(ResultFrame x) { 

     finalTotal = 0; 
     helperv = x; 
     helperv.jTarea.setText(""); 

    } 

    @Override 
    protected Void doInBackground() throws Exception { 

     helperv.jTarea.replaceSelection("Scanning..." + "\n"); 
     Thread.sleep(100); 
     callMainScan(); 

     return null; 

    } 

    @Override 
    protected void process(List<String> chunks) { 

     for (String str : chunks) { 

      helperv.jTarea.append(str); 
      helperv.scanlabel.setText(str); 

     } 

    } 

    @Override 

    protected void done() { 

     helperv.scanlabel.setText("Total Number of Files Matched: " + Integer.toString(finalTotal)); 

    } 

    private void callMainScan() throws IOException { 

     String[] myStringArray = new String[3]; 

     myStringArray[0] = "*.txt"; 
     myStringArray[1] = "*.html"; 
     myStringArray[2] = "*.pdf"; 

     File[] paths; 

     paths = File.listRoots(); 

     try { 

      for (File path : paths) { 

       String str = path.toString(); 
       String slash = "\\"; 

       String s = new StringBuilder(str).append(slash).toString(); 

       Path startingDir = Paths.get(s); 

       for (String stre : myStringArray) { 

        String pattern = stre; 

        Finder finder = new Finder(pattern); 
        Files.walkFileTree(startingDir, finder); 
        finder.done(); 

       } 

      } 
     } catch (IOException e) { 
      System.out.println("Exception occured"); 
     } 

    } 

    public class Finder 
      extends SimpleFileVisitor<Path> { 

     private final PathMatcher matcher; 
     private int numMatches = 0; 

     Finder(String pattern) { 
      matcher = FileSystems.getDefault() 
        .getPathMatcher("glob:" + pattern); 
     } 

     // Compares the glob pattern against 
     // the file or directory name. 
     void find(Path file) { 
      Path name = file.getFileName(); 
      if (name != null && matcher.matches(name)) { 
       numMatches++; 
       System.out.println(file); 
       str3 = file.toString(); 

       publish(str3 + "\n"); 

      } 
     } 

     // Prints the total number of 
     // matches to standard out. 
     void done() { 
//   System.out.println("Matched: " 
//     + numMatches); 
      finalTotal = finalTotal + numMatches; 
     } 

     // Invoke the pattern matching 
     // method on each file. 
     @Override 
     public FileVisitResult visitFile(Path file, 
       BasicFileAttributes attrs) { 
      find(file); 
      return CONTINUE; 
     } 

     // Invoke the pattern matching 
     // method on each directory. 
     @Override 
     public FileVisitResult preVisitDirectory(Path dir, 
       BasicFileAttributes attrs) { 
      find(dir); 
      return CONTINUE; 
     } 

     @Override 
     public FileVisitResult visitFileFailed(Path file, 
       IOException exc) { 
//   System.err.println(exc); 
      return CONTINUE; 
     } 
    } 

} 

сканирования Кнопка Действие

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    new Thread(new Runnable() { 

     @Override 
     public void run() { 

      sw = new ScanWorker(ResultFrame.this); 

      sw.execute(); 

     } 
    }).start(); 


} 
Смежные вопросы