Скажем, у меня есть папка с именем maps
и внутри maps
У меня есть map1.txt
, map2.txt,
и map3.txt
. Как я могу использовать Java и BufferReader
для чтения всех файлов .txt
в папке maps
(если это вообще возможно)?
Java - чтение всех файлов .txt в папке
Ответ 1
Что-то вроде следующего должно заставить вас идти, обратите внимание, что я использую apache commons FileUtils вместо беспорядочного использования буферов и потоков для простоты...
File folder = new File("/path/to/files");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
if (file.isFile() && file.getName().endsWith(".txt")) {
String content = FileUtils.readFileToString(file);
/* do somthing with content */
}
}
Ответ 2
Я бы взял @Andrew White ответ (+1 BTW) еще на один шаг и предложил вам использовать FileNameFilter для отображения только соответствующих файлов:
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
};
File folder = new File("/path/to/files");
File[] listOfFiles = folder.listFiles(filter);
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
String content = FileUtils.readFileToString(file);
// do something with the file
}
Ответ 3
final File folder = new File("C:/Dev Tools/apache-tomcat-6.0.37/webapps/ROOT/somefile");
for (final File fileEntry : folder.listFiles()) {
System.out.println("FileEntry Directory "+fileEntry);
Ответ 4
Я думаю, что это хороший способ прочитать все .txt файлы из карт и подпапок
private static void addfiles (File input,ArrayList<File> files)
{
if(input.isDirectory())
{
ArrayList <File> path = new ArrayList<File>(Arrays.asList(input.listFiles()));
for(int i=0 ; i<path.size();++i)
{
if(path.get(i).isDirectory())
{
addfiles(path.get(i),files);
}
if(path.get(i).isFile())
{
String name=(path.get(i)).getName();
if(name.lastIndexOf('.')>0)
{
int lastIndex = name.lastIndexOf('.');
String str = name.substring(lastIndex);
if(str.equals(".txt"))
{
files.add(path.get(i));
}
}
}
}
}
if(input.isFile())
{
String name=(input.getName());
if(name.lastIndexOf('.')>0)
{
int lastIndex = name.lastIndexOf('.');
String str = name.substring(lastIndex);
if(str.equals(".txt"))
{
files.add(input);
}
}
}
}
Ответ 5
Если вам нужен лучший способ сделать это, используя новый java.nio api, то это способ, взятый из java docs
Path dir = ...;
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(dir, "*.txt")) {
for (Path entry: stream) {
System.out.println(entry.getFileName());
}
} catch (IOException x) {
// IOException can never be thrown by the iteration.
// In this snippet, it can // only be thrown by newDirectoryStream.
System.err.println(x);
}
Ответ 6
Использование только JDK, если все ваши файлы находятся в одном каталоге:
File dir = new File("path/to/files/");
for (File file : dir.listFiles()) {
Scanner s = new Scanner(file);
// do something with file
s.close();
}
Чтобы исключить файлы, вы можете использовать listFiles(FileFilter)
Ответ 7
С помощью NIO
вы можете сделать следующее:
Files.walk(Paths.get("/path/to/files"))
.filter(Files::isRegularFile)
.filter(path -> path.getFileName().toString().endsWith(".txt"))
.map(FileUtils::readFileToString)
// do something
Для чтения содержимого файла вы можете использовать Files#readString
, но, как обычно, вам нужно обработать IOException
внутри лямбда-выражения.