File directory = new File("/user/folder");
File[] myarray;
myarray=new File[10];
myarray=directory.listFiles();
for (int j = 0; j < myarray.length; j++)
{
File path=myarray[j];
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String s = "";
while (br.ready()) {
s += br.readLine() + "\n";
}
}
myarray=new File[10];
不是必须的,因为它会被下一行代码覆盖! - Veger在https://dev59.com/SnVC5IYBdhLWcg3wdw65#286001中,看到了java.io.FileFilter
的好用方法。
File fl = new File(dir);
File[] files = fl.listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isFile();
}
});
static File mainFolder = new File("Folder");
public static void main(String[] args) {
lf.getFiles(lf.mainFolder);
}
public void getFiles(File f) {
File files[];
if (f.isFile()) {
String name=f.getName();
} else {
files = f.listFiles();
for (int i = 0; i < files.length; i++) {
getFiles(files[i]);
}
}
}
虽然我同意Rich、Orian和其他人使用以下内容:
final File keysFileFolder = new File(<path>);
File[] fileslist = keysFileFolder.listFiles();
if(fileslist != null)
{
//Do your thing here...
}
由于某些原因,这里的所有示例都使用绝对路径(即从根目录或Windows的驱动器号(C:\)开始)。
我想补充说明,也可以使用相对路径。所以,如果您的pwd(当前目录/文件夹)是folder1,并且您想解析folder1/subfolder,则只需编写以下代码(在上面的代码中而不是):
final File keysFileFolder = new File("subfolder");
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())
{
files.add(path.get(i));
}
}
}
if(input.isFile())
{
files.add(input);
}
}
这是一个与Java 1.7兼容的简单示例,可递归列出在命令行上指定的目录中的文件:
import java.io.File;
public class List {
public static void main(String[] args) {
for (String f : args) {
listDir(f);
}
}
private static void listDir(String dir) {
File f = new File(dir);
File[] list = f.listFiles();
if (list == null) {
return;
}
for (File entry : list) {
System.out.println(entry.getName());
if (entry.isDirectory()) {
listDir(entry.getAbsolutePath());
}
}
}
}
Java 8 Files.walk(..)
是一个不错的工具,当你确信它不会抛出(java.nio.file.AccessDeniedException)时,使用它可以得心应手。
下面是一种安全解决方案,虽然不如Java 8Files.walk(..)
那么优雅:
int[] count = {0};
try {
Files.walkFileTree(Paths.get(dir.getPath()), new HashSet<FileVisitOption>(Arrays.asList(FileVisitOption.FOLLOW_LINKS)),
Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file , BasicFileAttributes attrs) throws IOException {
System.out.printf("Visiting file %s\n", file);
++count[0];
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file , IOException e) throws IOException {
System.err.printf("Visiting failed for %s\n", file);
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir , BasicFileAttributes attrs) throws IOException {
System.out.printf("About to visit directory %s\n", dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
为了扩展已接受的答案,我将文件名存储到ArrayList中(而不仅仅是将它们转储到System.out.println中),我创建了一个辅助类"MyFileUtils",以便其他项目可以导入:
class MyFileUtils {
public static void loadFilesForFolder(final File folder, List<String> fileList){
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
loadFilesForFolder(fileEntry, fileList);
} else {
fileList.add( fileEntry.getParent() + File.separator + fileEntry.getName() );
}
}
}
}
我在文件名中添加了完整路径。 你可以像这样使用它:
import MyFileUtils;
List<String> fileList = new ArrayList<String>();
final File folder = new File("/home/you/Desktop");
MyFileUtils.loadFilesForFolder(folder, fileList);
// Dump file list values
for (String fileName : fileList){
System.out.println(fileName);
}
ArrayList是按“值”传递的,但该值用于指向存储在JVM堆中的同一ArrayList对象。这样,每个递归调用都会将文件名添加到同一个ArrayList中(我们并不是在每个递归调用中创建新的ArrayList)。
以上有很多好的答案,这里提供一种不同的方法:在maven项目中,您放置在资源文件夹中的所有内容默认都会复制到target/classes文件夹中。要查看运行时可用的内容
ClassLoader contextClassLoader =
Thread.currentThread().getContextClassLoader();
URL resource = contextClassLoader.getResource("");
File file = new File(resource.toURI());
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
现在,如果你想要获取特定文件夹中的文件,假设你的资源文件夹中有一个名为“res”的文件夹,只需将以下内容替换:
URL resource = contextClassLoader.getResource("res");
contextClassLoader.getResource("com.companyName");
package com;
import java.io.File;
/**
*
* @author ?Mukesh
*/
public class ListFiles {
static File mainFolder = new File("D:\\Movies");
public static void main(String[] args)
{
ListFiles lf = new ListFiles();
lf.getFiles(lf.mainFolder);
long fileSize = mainFolder.length();
System.out.println("mainFolder size in bytes is: " + fileSize);
System.out.println("File size in KB is : " + (double)fileSize/1024);
System.out.println("File size in MB is :" + (double)fileSize/(1024*1024));
}
public void getFiles(File f){
File files[];
if(f.isFile())
System.out.println(f.getAbsolutePath());
else{
files = f.listFiles();
for (int i = 0; i < files.length; i++) {
getFiles(files[i]);
}
}
}
}
Files.walkFileTree
方法,详见https://dev59.com/PXI-5IYBdhLWcg3wc4Cw#23814217。 - micha