Belirli bir klasörü ayrıştıracak ve .txt
dosyaları için arama yapabilecek bir yerleşik Java kodu var mı?Java: Belirtilen klasördeki .txt dosyalarını bulun
cevap
Sen java.io.File
sınıfı tarafından sağlanan listFiles()
yöntemi kullanabilirsiniz olduğunu.
import java.io.File;
import java.io.FilenameFilter;
public class Filter {
public File[] finder(String dirName){
File dir = new File(dirName);
return dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename)
{ return filename.endsWith(".txt"); }
});
}
}
@Funsuk, bu benim için gayet iyi çalışıyor, en azından denediğim basit test vakaları için. 36 kişi aynı fikirde. Hangi şekilde sizin için işe yaramıyor? – djna
Dene:
List<String> textFiles(String directory) {
List<String> textFiles = new ArrayList<String>();
File dir = new File(directory);
for (File file : dir.listFiles()) {
if (file.getName().endsWith((".txt"))) {
textFiles.add(file.getName());
}
}
return textFiles;
}
Sen bu durumda bir olgu duyarsız arama yapmak istiyorum: özyinelemeli metin dosyaları için bir dizin ağacında aramak istiyorsanız
if (file.getName().toLowerCase().endsWith((".txt"))) {
, sen olmalı Yukardakileri ya bir tekrarlama fonksiyonu ya da bir istif ile tekrarlayan bir fonksiyon olarak adapte edebilir.
Güzel görünüyor. Bunu deneyeyim .. – Sri
İşte benim platforma özel kodu (unix)
public static List<File> findFiles(String dir, String... names)
{
LinkedList<String> command = new LinkedList<String>();
command.add("/usr/bin/find");
command.add(dir);
List<File> result = new LinkedList<File>();
if (names.length > 1)
{
List<String> newNames = new LinkedList<String>(Arrays.asList(names));
String first = newNames.remove(0);
command.add("-name");
command.add(first);
for (String newName : newNames)
{
command.add("-or");
command.add("-name");
command.add(newName);
}
}
else if (names.length > 0)
{
command.add("-name");
command.add(names[0]);
}
try
{
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
p.waitFor();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
// System.err.println(line);
result.add(new File(line));
}
p.destroy();
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
Neden daha kolay, platformlar arası bir çözüm mevcut olduğunda, bunu kullanmak istesin? – BlueSilver
Yerel bir sürümü kullanmanın bir nedeni, uzun bir dizinde çok sayıda dosyanın okunmasını engellemektir. Java 6'da, java.io.File sınıfı bir dizindeki dosyaları akış olarak veya bir yineleyici kullanarak okuyan yöntemleri içermez. File.listFiles (FileFilter) 've' File'ın Java 6 uygulamaları.listFiles (FilenameFilter) 'her ikisi de ilk önce tüm dosyaları bir dizinden okur ve sonra filtreyi uygular. Milyonlarca dosya içeren bir diziyle karşılaşıldığında, örneğin, File.listFiles, JVM'deki tüm yığın belleği tüketebileceği çok sayıda dosya okuyabilir. –
Bkz. Http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java, File.listFiles (FileFilter) 'ın uygulanması için. –
Gerçekten kullanışlı, hafif bir değişiklik ile kullandı:
filename=directory.list(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.startsWith(ipro);
}
});
import org.apache.commons.io.filefilter.WildcardFileFilter;
.........
.........
File dir = new File(fileDir);
FileFilter fileFilter = new WildcardFileFilter("*.txt");
File[] files = dir.listFiles(fileFilter);
Yukarıdaki kod ben buldum yayınları temel benim çözüm yapılmış
benim için büyük işler burada Google ile. Ve eski bir iş parçacığı olsa bile, benimkilere de zarar vermenin bir zararı olmadığını düşündüm.
Bu kodun verdiği tek artı, alt dizinlerde de yineleyebilmesidir. aşağıdaki gibi
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
yöntem olup:
List <File> exploreThis(String dirPath){
File topDir = new File(dirPath);
List<File> directories = new ArrayList<>();
directories.add(topDir);
List<File> textFiles = new ArrayList<>();
List<String> filterWildcards = new ArrayList<>();
filterWildcards.add("*.txt");
filterWildcards.add("*.doc");
FileFilter typeFilter = new WildcardFileFilter(filterWildcards);
while (directories.isEmpty() == false)
{
List<File> subDirectories = new ArrayList();
for(File f : directories)
{
subDirectories.addAll(Arrays.asList(f.listFiles((FileFilter)DirectoryFileFilter.INSTANCE)));
textFiles.addAll(Arrays.asList(f.listFiles(typeFilter)));
}
directories.clear();
directories.addAll(subDirectories);
}
return textFiles;
}
içe org.apache.commons.io.FileUtils;
Liste htmFileList = new ArrayList(); için
(Dosya dosyası: (Liste) FileUtils.listFiles (yeni Dosyası (SRCDIRın), new String [] { "txt", "TXT"}, true)) { htmFileList.add (dosya); }
Bu cevap platforma özel olmak olabilir bir dizin
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
public class FileFinder extends SimpleFileVisitor<Path> {
private PathMatcher matcher;
public ArrayList<Path> foundPaths = new ArrayList<>();
public FileFinder(String pattern) {
matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path name = file.getFileName();
if (matcher.matches(name)) {
foundPaths.add(file);
}
return FileVisitResult.CONTINUE;
}
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
Path fileDir = Paths.get("files");
FileFinder finder = new FileFinder("*.txt");
Files.walkFileTree(fileDir, finder);
ArrayList<Path> foundFiles = finder.foundPaths;
if (foundFiles.size() > 0) {
for (Path path : foundFiles) {
System.out.println(path.toRealPath(LinkOption.NOFOLLOW_LINKS));
}
} else {
System.out.println("No files were founds!");
}
}
}
- 1. Beyaz boşluklu PHP dosyalarını bulun
- 2. Bir klasördeki dosya listesini Linux'ta bir txt dosyasına nasıl gönderirim?
- 3. WebDAV - "Klasördeki dosyaları göster" istemi?
- 4. PHP'de birden çok TXT dosyasında belirli bir metin bulun
- 5. java jpeg2000 dosyalarını oku
- 6. Apache'den kök klasördeki komut dosyalarını php kullanarak nasıl çalıştırılır?
- 7. Albümleri ve flickr api kullanarak belirtilen albümlerin fotoğrafları bulun
- 8. Java: Program okunurken txt dosyasının içeriğini listeleyemiyor
- 9. Bir .txt dosyasının tüm onaltılı değerleri java
- 10. Bir txt dosyasına yazın android java
- 11. .data dosyasından .txt dosyasına nasıl yazılır Java?
- 12. 0 Java içinden harici .java dosyalarını derleme
- 13. Eclipse: Java ve JSF/JSP'deki başvuruları bulun
- 14. Java Sürücüsünü Kullanarak Bulun ve Başa Dön
- 15. Projedeki bir klasördeki dosyaları oku
- 16. Atom - seçili klasördeki uzantıyla arama
- 17. Txt dosyası yapılandırma dosyası olarak
- 18. Bir klasördeki dosya sayısını alın, alt klasörleri atlayın
- 19. Klasördeki dosyaları python'da bir dizine kopyalayın
- 20. Regsvr32 geçerli klasördeki dll'yi bulmakta başarısız oluyor
- 21. Bir klasördeki 7 en son dosyayı tutan toplu iş dosyası
- 22. Bir klasördeki ve klasördeki dosyaları yeniden adlandırma Çocuklar
- 23. maven sadece modifiye java dosyalarını nasıl derler?
- 24. .java dosyalarını derlemek için bir java programı geliştirme
- 25. Java içinde FileDialog dosyalarını kaydeder ilk dosya uzantısı
- 26. Bir klasördeki tüm HTML dosyalarını PNG'ye dönüştürmek için Phantom JS'yi kullanma
- 27. Birden çok alt klasördeki komut dosyalarını çalıştırmak için npm kullanmak mümkün mü?
- 28. Web formunda bir kontrol bulun
- 29. Dlmread ile bir klasördeki tüm dosyaları nasıl okuyabilirim?
- 30. Değeri, aralığa göre bulun Excel-VBA
tüm metin dosyaları eklemek için benim son kodudur? – Milhous
Ayrıca bkz. Http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim
Bu gerçek bir soru. Kapanmak için olması gerektiği kadar anlaşılması zor olsaydı, o zaman sadece soruyu mükemmel bir şekilde cevaplamakla kalmayıp, aynı zamanda 89 tane de olumlu yanıtı içeren bir cevap olmazdı. – SpaceCore186