Disons que j'ai un dossier appelé maps
et à l'intérieur de maps
j'ai map1.txt
, map2.txt,
et map3.txt
. Comment utiliser Java et la variable BufferReader
pour lire tous les fichiers .txt
du dossier maps
(si possible)?
Quelque chose comme ce qui suit devrait vous aider, notez que j'utilise FileUtils commun à Apache au lieu de jouer avec les tampons et les flux pour plus de simplicité ...
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 */
}
}
Je voudrais prendre @Andrew White answer (+1 BTW) un peu plus loin et suggérer d'utiliser FileNameFilter pour répertorier uniquement les fichiers pertinents:
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
}
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);
Je pense que c'est un bon moyen de lire tous les fichiers .txt à partir de cartes et de sous-dossiers
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);
}
}
}
}
Si vous voulez une meilleure façon de faire cela en utilisant la nouvelle API Java.nio, alors voici le chemin emprunté de les documents Java
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);
}
En utilisant uniquement JDK, si tous vos fichiers sont dans un répertoire:
File dir = new File("path/to/files/");
for (File file : dir.listFiles()) {
Scanner s = new Scanner(file);
// do something with file
s.close();
}
Pour exclure des fichiers, vous pouvez utiliser listFiles(FileFilter)