您如何从 Java 中的子目录中读取文件?
How do you read in a file from a subdirectory in Java?
我有一个名为 Class 的文件夹,它的两个子目录是 Lectures 和 Grades,这两个子目录中有 txt 文件。如何从主目录 - Class 访问子目录(可能还有 Lectures 和 Grades 子目录的其他子目录)?我知道我可以在代码中使用绝对路径,但我想从起始文件夹 Class 开始。到目前为止,我的代码是这样的:
public class Test {
public static void main(String[] args) {
File directory = new File("/Users/Desktop/Class");
File[] folder = directory.listFiles();
for (File aFile : folder) {
// Stuck here...
}
}
}
抱歉..我是Java的新手..
可以递归调用读取子目录文件的方法
public static void main(String[] args) {
File currentDir = new File("/Users/Desktop/Class"); // current directory
displayDirectoryFiles(currentDir);
}
public static void displayDirectoryFiles(File dir) {
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
displayDirectoryContents(file);
} else {
System.out.println(" file:" + file.getCanonicalPath());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
正确处理异常,目前只是打印stacktrace
// Recursive Java program to print all files
// in a folder(and sub-folders)
import java.io.File;
public class GFG
{
static void RecursivePrint(File[] arr,int index,int level)
{
// terminate condition
if(index == arr.length)
return;
// tabs for internal levels
for (int i = 0; i < level; i++)
System.out.print("\t");
// for files
if(arr[index].isFile())
System.out.println(arr[index].getName());
// for sub-directories
else if(arr[index].isDirectory())
{
System.out.println("[" + arr[index].getName() + "]");
// recursion for sub-directories
RecursivePrint(arr[index].listFiles(), 0, level + 1);
}
// recursion for main directory
RecursivePrint(arr,++index, level);
}
// Driver Method
public static void main(String[] args)
{
// Provide full path for directory(change accordingly)
String maindirpath = "C:\Users\Gaurav Miglani\Desktop\Test";
// File object
File maindir = new File(maindirpath);
if(maindir.exists() && maindir.isDirectory())
{
// array for files and sub-directories
// of directory pointed by maindir
File arr[] = maindir.listFiles();
System.out.println("**********************************************");
System.out.println("Files from main directory : " + maindir);
System.out.println("**********************************************");
// Calling recursive method
RecursivePrint(arr,0,0);
}
}
}
你看过这个答案吗:Java, List only subdirectories from a directory, not files ?
这也可能是一个解决方案,有几种方法:http://zetcode.com/articles/javalistdirectory/
除了 Ros5292 答案之外,这可以使用 Apache Commons IO
库来实现。
public void iterateFilesAndDirectoriesUsingApacheCommons() {
Iterator it = FileUtils.iterateFilesAndDirs(new File("/Users/Desktop/"), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
while (it.hasNext()) {
System.out.println(((File) it.next()).getName());
}
}
我有一个名为 Class 的文件夹,它的两个子目录是 Lectures 和 Grades,这两个子目录中有 txt 文件。如何从主目录 - Class 访问子目录(可能还有 Lectures 和 Grades 子目录的其他子目录)?我知道我可以在代码中使用绝对路径,但我想从起始文件夹 Class 开始。到目前为止,我的代码是这样的:
public class Test {
public static void main(String[] args) {
File directory = new File("/Users/Desktop/Class");
File[] folder = directory.listFiles();
for (File aFile : folder) {
// Stuck here...
}
}
}
抱歉..我是Java的新手..
可以递归调用读取子目录文件的方法
public static void main(String[] args) {
File currentDir = new File("/Users/Desktop/Class"); // current directory
displayDirectoryFiles(currentDir);
}
public static void displayDirectoryFiles(File dir) {
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
displayDirectoryContents(file);
} else {
System.out.println(" file:" + file.getCanonicalPath());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
正确处理异常,目前只是打印stacktrace
// Recursive Java program to print all files
// in a folder(and sub-folders)
import java.io.File;
public class GFG
{
static void RecursivePrint(File[] arr,int index,int level)
{
// terminate condition
if(index == arr.length)
return;
// tabs for internal levels
for (int i = 0; i < level; i++)
System.out.print("\t");
// for files
if(arr[index].isFile())
System.out.println(arr[index].getName());
// for sub-directories
else if(arr[index].isDirectory())
{
System.out.println("[" + arr[index].getName() + "]");
// recursion for sub-directories
RecursivePrint(arr[index].listFiles(), 0, level + 1);
}
// recursion for main directory
RecursivePrint(arr,++index, level);
}
// Driver Method
public static void main(String[] args)
{
// Provide full path for directory(change accordingly)
String maindirpath = "C:\Users\Gaurav Miglani\Desktop\Test";
// File object
File maindir = new File(maindirpath);
if(maindir.exists() && maindir.isDirectory())
{
// array for files and sub-directories
// of directory pointed by maindir
File arr[] = maindir.listFiles();
System.out.println("**********************************************");
System.out.println("Files from main directory : " + maindir);
System.out.println("**********************************************");
// Calling recursive method
RecursivePrint(arr,0,0);
}
}
}
你看过这个答案吗:Java, List only subdirectories from a directory, not files ?
这也可能是一个解决方案,有几种方法:http://zetcode.com/articles/javalistdirectory/
除了 Ros5292 答案之外,这可以使用 Apache Commons IO
库来实现。
public void iterateFilesAndDirectoriesUsingApacheCommons() {
Iterator it = FileUtils.iterateFilesAndDirs(new File("/Users/Desktop/"), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
while (it.hasNext()) {
System.out.println(((File) it.next()).getName());
}
}