怎么使用java编程实现linux下所有文件目录的linux c 遍历目录

大家看一下,一个java的io问题,遍历指定文件夹下的所有子文件夹
大家看一下,一个java的io问题,遍历指定文件夹下的所有子文件夹
import java.io.F
import java.io.FilenameF
import java.util.ArrayL
import java.util.A
import java.util.C
import java.util.I
import java.util.L
import java.util.regex.P
public final class Directory {
public static void main(String argv[]){
for(File file:Directory.walk(&C:\\Windows&,&.*\\.exe&))
System.out.println(file);
public static File[] local(File dir,final String regex){
return dir.listFiles(new FilenameFilter(){
private Pattern pile(regex);
public boolean accept(File dir,String name){
return pattern.matcher(new File(name).getName()).matches();
public static File[] local(String path,String regex){
return local(new File(path),regex);
public static class TreeInfo implements Iterable{
public List files=new ArrayList();
public List dirs=new ArrayList();
void addAll(TreeInfo other){
files.addAll(other.files);
dirs.addAll(other.dirs);
public Iterator iterator(){
return files.iterator();
public String toString(){
return &dirs:&+PPrint.pformat(dirs)+&\n\nfiles&+PPrint.pformat(files);
public static TreeInfo walk(String start){
return recurseDirs(new File(start),&.*&);
public static TreeInfo walk(String start,String regex){
return recurseDirs(new File(start),regex);
public static TreeInfo walk(File start,String regex){
return recurseDirs(start,regex);
public static TreeInfo walk(File start){
return recurseDirs(start,&.*&);
static TreeInfo recurseDirs(File startDir,String regex){
TreeInfo result=new TreeInfo();
for(File item:startDir.listFiles()){
if(item.isDirectory()){
result.dirs.add(item);
result.addAll(recurseDirs(item,regex));
if(item.getName().matches(regex))
result.files.add(item);
class PPrint{
public static String pformat(Collection c){
if(c.size()==0)
return &[]&;
StringBuilder result=new StringBuilder(&[&);
if(c.size()!=1)
for(Object m: c){
result.append(&\n&);
result.append(m);
result.append(c);
if(c.size()!=1)
result.append(&\n&);
result.append(&]&);
return result.toString();
public static void pprint(Collection c){
System.out.println(pformat(c));
public static void pprint(Object []c ){
System.out.println(pformat(Arrays.asList(c)));
此程序会遍历c盘windows目录下及其所有子文件夹,并输出所有exe文件,但问题是第一次运行就抛出异常,根本没有任何结果。麻烦大家看一下,谢谢了。最后那个PPrint类是为了格式化输出的,与代码的核心部分无关。Directory类中local方法是只遍历一层文件夹,在这个程序中并没有用到。麻烦各位高手看看为什么总是抛出异常,看一下怎么解决,谢谢了
static TreeInfo recurseDirs(File startDir, String regex) {
TreeInfo result = new TreeInfo();
for (File item : startDir.listFiles()) {
if (item == null)//过滤空值
if (item.isDirectory()) {
result.dirs.add(item);
result.addAll(recurseDirs(item, regex));
if (item.getName().matches(regex))
result.files.add(item);
请遵守网上公德,勿发布广告信息
相关问答:
我运行没有任何问题,抛出什么异常?你修改C:\\Windows为一个其他路径试试,不要带\\,如果要绝对路径,请使用File下面的目录分隔符。应该是你这里定义的有问题。
记住:java具有可移植性,不要使用与底层操作系统有密切联系的操作,否则在更换环境是会出现令人意想不到的问题。Java 学习笔记- File I/O - 创建或遍历文件目录 -
- ITeye技术网站
博客分类:
java.nio.file.Files类提供了创建或读取目录的方法,其中创建目录的方法有:
static Path createDirectories(Path dir, FileAttribute&?&... attrs)
1.此方法创建一个目录,如果路径所指的父目录不存在将逐一创建。
2.如果不指定FileAttribute(不指定是指传一个参数dir,而不是两个参数dir和null),创建的目录的属性为文件系统默认的(default)的属性。
3.在创建目录过程中如果该目录下已经存在一个文件和即将要创建的目录同名(文件包含扩展名)将抛出FileAlreadyExistException。
Path path = Paths.get("D:\\360云盘\\javase1111.txt");
Files.createDirectories(path);
如果D:\\360云盘\\下已经存在文件javase1111.txt,则会抛出异常,否则会创建一个名为javase1111.txt的文件夹。
4.如果即将要创建的目录已经存在,此方法不会抛出FileAlreadyExistException
static Path createDirectory(Path dir, FileAttribute&?&... attrs)
1.此方法创建单个目录,如果父目录不存在会抛出NoSuchFileExistException.此点与上述方法不同。
2.关于FileAttribute与上述方法相同。
3.同上方法3.
4. 如果即将要创建的目录已经存在,此抛出FileAlreadyExistException,此点与上述方法不同
创建临时目录的方法:
static PathcreateTempDirectory(Path dir, String prefix, FileAttribute&?&... attrs)
在指定的目录dir下用指定的前缀prefix创建临时目录
static PathcreateTempDirectory(String prefix, FileAttribute&?&... attrs)
在系统默认的临时文件目录下创建指定前缀prefix创建临时目录
static PathcreateTempFile(Path dir, String prefix, String suffix, FileAttribute&?&... attrs)
在指定的目录dir下用指定的前缀prefix,后缀suffix创建临时目录
static PathcreateTempFile(String prefix, String suffix, FileAttribute&?&... attrs)
在系统默认的临时文件目录下创建指定前缀prefix后缀suffix创建临时目录
遍历目录的方法:
1.打印默认文件系统的根目录:
* prints the root directories for the default file system
public static void printRootDirectory() {
List&Path& dirs = (List&Path&) FileSystems.getDefault().getRootDirectories();
for (Path name : dirs) {
System.err.println(name);
2.递归打印目录下的目录和文件用“-”区分级别
* print the content of a directory in recursion
* @param path
* @throws IOException
public static void listDirecotryContents(Path path) throws IOException {
listDirecotriesInLevel(path, 0);
private static void listDirecotriesInLevel(Path path, int level) throws IOException {
StringBuffer nEmpty = new StringBuffer();
for (int i = 0; i & i++) {
nEmpty.append("-");
DirectoryStream&Path& stream = Files.newDirectoryStream(path);
for (Path file : stream) {
System.out.println(nEmpty.toString() + file.getFileName());
if (Files.isDirectory(file)) {
listDirecotriesInLevel(file, level + 1);
浏览: 16625 次
来自: 上海
io.File只能通过listFile一次性全部获取File, ...
楼主确实该整理整理了,貌似记忆很混乱,加油。
Hxuejie 写道dbvqht 写道文不对题啊所谓的标题党? ...
dbvqht 写道文不对题啊
所谓的标题党?
文不对题啊遍历输出指定目录下的所有文件-linux-电脑编程网遍历输出指定目录下的所有文件作者:佚名 和相关&&
opendir(),readdir(),closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括
以下两个头文件:
#include &sys/types.h&
#include &dirent.h&
opendir函数的原型为:
DIR *opendir(const char *name);
它返回一个DIR*类型,这就是一个句柄啦,你不用管它的内部结构是什么样的,只要知道这个
句柄就是等一下要传给readdir()函数的参数就行了。
readdir函数的原型为:
struct dirent *readdir(DIR *dir);
看它的参数就知道该参数是opendir函数返回的句柄,而该函数的返回值是struct dirent* 类型,
这里我们必须了解一下这个结构体:
struct dirent {
&&&&&&&&&&&&&& ino_t&&&&&&&&& d_&&&&&& /* inode number */&&&&&&&&&&&&&& off_t&&&&&&&&& d_&&&&&& /* offset to the next dirent */&&&&&&&&&&&&&& unsigned short d_&&& /* length of this record */&&&&&&&&&&&&&& unsigned char& d_&&&&& /* type of file */&&&&&&&&&&&&&& char&&&&&&&&&& d_name[256]; /* filename */};
这个结构体的d_name存放的就是文件的名字,这里的文件包括普通文件,目录文件等等,在
的思想中,所有的东西都是文件。
closedir函数的原型为:
int closedir(DIR *dir);
这个函数就不用多说了,一般有开(open),就有关(close),这样的结构经常可出看到,
如fopen,fclose等等。
三个函数介绍完了,直接来一个例子吧:
#include &stdio.h&#include &string.h&#include &sys/types.h&#include &dirent.h&#include &sys/stat.h&char filename[256][256];int len = 0;
int trave_dir(char* path, int depth){
&&&&DIR *d; /*声明一个句柄*/&&&&struct dirent * /*readdir函数的返回值就存放在这个结构体中*/&&&&
&&&&if(!(d = opendir(path)))&&&&{&&&&&&&printf("error\n");&&&&&&&return -1;&&&&}&&&&while((file = readdir(d)) != NULL)&&&&{&&&&&&&&/*把当前目录.,上一级目录..及隐藏文件都去掉,避免死循环遍历目录*/&&&&&&&&if(strncmp(file-&d_name, ".", 1) == 0)&&&&&&&&&&&&&&&&&&&strcpy(filename[len++], file-&d_name); /*保存遍历到的文件名*/&&&&&&&&/*判断该文件是否是目录,及是否已搜索了三层,这里我定义只搜索了三层目录,太深就不搜了,省得搜出太多文件*/&&&&&&&&if(stat(file-&d_name, &sb) &= 0 && S_ISDIR(sb.st_mode) && depth &= 3)&&&&&&&&{&&&&&&&&&&&&trave_dir(file-&d_name, depth + 1);&&&&&&&&}&&&&}&&&&closedir(d);&&&&return 0;}int main(){&&&int depth = 1;&&&&&&trave_dir("/home/user/", depth);&&&for(i = 0; i & i++)&&&{&&&&&&&printf("%s\t", filename[i]);&&&}&&&printf("\n");&&&return 0;}相关资料:|||||||遍历输出指定目录下的所有文件来源网络,如有侵权请告知,即处理!编程Tags:                &                    Shell递归遍历目录下文件 - valder fields - ITeye技术网站
博客分类:
遍历linux某目录下的所有文件
#!/bin/bash
# $1是运行脚本时,输入的第一个参数,这里指的是使用者希望搜索的目录
# 下面的代码是对目录进行判断,如果为空则使用脚本所在的目录;否则,搜索用户输入的目录
if [[ -z "$1" ]] || [[ ! -d "$1" ]]; then
echo "The directory is empty or not exist!"
echo "It will use the current directory."
nowdir=$(pwd)
nowdir=$(cd $1; pwd)
echo "$nowdir"
# 递归函数的实现
function SearchCfile()
#这里可以修改为判断文件类型,如.c,.java等等文件类型,修改一下grep条件就可以了
cfilelist=$(ls -l | grep "^-" | awk '{print $9}')
for cfilename in $cfilelist
echo $cfilename
# 遍历当前目录,当判断其为目录时,则进入该目录递归调用该函数;
dirlist=$(ls)
for dirname in $dirlist      
if [[ -d "$dirname" ]];then
cd $dirname
#SearchCfile 这里有bug,跳转到根目录了
#这里把当前的目录作为参数输入
SearchCfile $(pwd)
# 调用上述递归调用函数
SearchCfile $nowdir
浏览: 250843 次
来自: 深圳
yugouai 写道wxcking 写道请问,Windows下 ...
wxcking 写道请问,Windows下怎么配置呢?Data ...
请问,Windows下怎么配置呢?
总结的非常好,每次都来看
在hive0.11版本测试有bug,SELECTcolumn_ ...}

我要回帖

更多关于 编程中树的遍历 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信