我希望遍历多个文件,直到找到.zip文件或.xml文件
我的文件包含多个文件夹,每个文件夹的末尾都有.zip文件和.xml文件,而有些文件夹甚至可能没有
以下是我的代码:
package Traversefile;
import java.io.File;
public class traversefile {
/**
* @param args
*/
static String[] str1;
static File dir = new File("/home/evangelist/newdata");
private static void traverse(File dir) throws NullPointerException{
if (dir.isDirectory())
{
String[] children = dir.list();
for (int i=0; i<children.length; i++)
{
traverse(new File(dir, children[i]));
}
}
if (dir.isFile())
{
str1 = dir.list();
}
for (int i=0; i<str1.length; i++)
{
System.out.println("filename:"+ str1[i]);
}
}
public static void main(String[] args) {
traverse(dir);
// TODO Auto-generated method stub
}
}
我为检查遍历所做的更改: 包Traversefile;
import java.io.File;
public class traversefile {
/**
* @param args
*/
static String[] str1;
//static String homePath = System.getProperty("user.home");
static File dir = new File("/home/evangelist/newdata/nnc2/pairtree_root/ar/k+/=1/39/60/=t");
static int counter = 0;
static int kounter = 0;
static int krounter = 0;
private static void traverse(File dir) throws NullPointerException{
if(dir.isDirectory())
{
counter ++;
String[] children = dir.list();
//System.out.println(children);
for (int i=0; children != null && i<children.length; i++)
{
//System.out.println(children[i]);
//System.out.println(" yo + "+ counter );
traverse(new File(dir,children[i]));
}
}
if (dir.isFile())
{
krounter++;
if (dir.getName().endsWith(".xml")) //dir.getName().endsWith(".zip") ||
{
System.out.println(dir.getAbsolutePath());
//System.out.println(krounter);
}
}
}
public static void main(String[] args) {
traverse(dir);
// TODO Auto-generated method stub
}
}
它在第27和19行给出了一个零点异常。
如何遍历n个文件夹,最后当我发现.zip znd .xml文件复制其位置时
任何帮助都将得到应用
答案 0 :(得分:4)
也许这段代码可以帮到你。
private static void traverse(File dir){
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; children != null && i < children.length; i++) {
traverse(new File(dir, children[i]));
}
}
if (dir.isFile()) {
if (dir.getName().endsWith(".zip")
|| dir.getName().endsWith(".xml")) {
System.out.println(dir.getAbsolutePath());//change it if needed
}
}
}
答案 1 :(得分:1)
看起来您正在尝试引用计算机文件系统中的文件。既然如此,你只能说"/home/evangelist/newdata"
。首先,您需要通过调用String homePath = System.getProperty("user.home");
来获取对主目录的引用然后您可以说static File dir = new File(homePath + "evangelist/newdata");
,假设福音传播者是您主目录中的文件夹。
默认情况下,Java假定引用的任何文件都在程序的工作目录中。
答案 2 :(得分:1)
以下代码段错误。一个简单的文件没有子节点,因此list()
将返回null。
if (dir.isFile())
{
str1 = dir.list();
}
如果dir是文件,此处str1
将为null。
编辑:链接到java File.list()
API。它明确提到如果对象不是目录http://docs.oracle.com/javase/6/docs/api/java/io/File.html#list(),list()将返回null。