⑴ java中打开文件目录的递归并实现文件目录分层显示,纪录实时进度
试试这个代码。
importjava.io.File;
importjava.text.DecimalFormat;
importjava.text.SimpleDateFormat;
importjava.util.Date;
{
publicFilesAndDirectories(){
}
publicvoidrunTest(){
//listfilesandfolders
Stringdir="D:\temp";
Filefile=newFile(dir);
displayInfo(0,file);
}
privatevoiddisplayInfo(intdepth,Filefile){
//Name,Date,Size,Attr
booleanexecutable=file.canExecute();
booleanreadable=file.canRead();
booleanwritable=file.canWrite();
booleanhidden=file.isHidden();
booleandirectory=file.isDirectory();
longlastModified=file.lastModified();
longlength=file.length();
Stringname=file.getName();
//createASCIIfilestructure
StringBuilderbuf=newStringBuilder();
for(inti=0;i<depth;++i){
buf.append("|");
}
if(directory){
buf.append("+");
}
if(name.isEmpty()){
buf.append(".");
}else{
buf.append(name);
}
//addmodificationdate
buf.append(" ");
Datedate=newDate(lastModified);
buf.append(newSimpleDateFormat().format(date));
buf.append(" ");
//addfilesizeinkilobytes
longkb=length/1024;
DecimalFormatformat=newDecimalFormat();
format.setGroupingUsed(true);
buf.append(format.format(kb));
buf.append("KB");
//addread,write,executeattributeflags
buf.append(" ");
if(hidden)
buf.append(".");
if(readable)
buf.append("R");
if(writable)
buf.append("W");
if(executable)
buf.append("X");
//
System.out.println(buf.toString());
File[]children=file.listFiles();
if(children!=null){
for(Filechild:children){
displayInfo(depth+1,child);
}
}
}
publicstaticvoidmain(String[]args){
newFilesAndDirectories().runTest();
}
}
⑵ 使用java递归方法遍历指定目录下所有子目录和子文件
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 读取目录及子目录下指定文件名的路径 并放到一个数组里面返回遍历
* @author zdz8207
*
*/
public class FileViewer {
public static void main(String[] args) {
//List arrayList = FileViewer.getListFiles("d:/com","html",true);
//读取d:/com下的以java 结尾的文件 如有子目录,包含之(后缀名为null则为所有文件)
//List arrayList = FileViewer.getListFiles("d:/com","java",true);
//经试验,后缀不能不填写,否则编译不通过,提示“FileViewer.java:17: 非法的表达式开始”。
//另外后缀为""时的情况需要 增加到IF 里去,否则 后缀为""时,不会显示所有文件
List arrayList = FileViewer.getListFiles("d:/com","",true);
if(arrayList.isEmpty())
{
System.out.println("没有符号要求的文件");
}
else
{
String message = "";
message += "符号要求的文件数:" + arrayList.size() + "\r\n";
System.out.println(message);
for (Iterator i = arrayList.iterator(); i.hasNext();)
{
String temp = (String) i.next();
System.out.println(temp);
message += temp + "\r\n";
}
//将显示的文件路径写到指定的文件里,若文件不存在,则提示IO异常
//java.io.FileNotFoundException: d:\ajax\menu.txt (系统找不到指定的路径。)
//如果 加个文件是否存在的判断,如不存在就在当前目录新建一个,则更好。
appendMethod("d:/menu.txt",message);
}
}
public static List<String> fileList = new ArrayList<String>();
/**
*
* @param path 文件路径
* @param suffix 后缀名
* @param isdepth 是否遍历子目录
* @return
*/
public static List getListFiles(String path, String suffix, boolean isdepth)
{
File file = new File(path);
return FileViewer.listFile(file ,suffix, isdepth);
}
public static List listFile(File f, String suffix, boolean isdepth)
{
//是目录,同时需要遍历子目录
if (f.isDirectory() && isdepth == true)
{
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++)
{
listFile(t[i], suffix, isdepth);
}
}
else
{
String filePath = f.getAbsolutePath();
System.out.println("suffix = "+suffix);
if(suffix =="" || suffix == null)
{
//后缀名为null则为所有文件
System.out.println("----------------");
fileList.add(filePath);
}
else
{
int begIndex = filePath.lastIndexOf(".");//最后一个.(即后缀名前面的.)的索引
String tempsuffix = "";
if(begIndex != -1)//防止是文件但却没有后缀名结束的文件
{
tempsuffix = filePath.substring(begIndex + 1, filePath.length());
}
if(tempsuffix.equals(suffix))
{
fileList.add(filePath);
}
System.out.println("|||||||||||||||||||");
}
}
return fileList;
}
/**
* 方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethod(String fileName, String content)
{
try
{
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\r\n");
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
⑶ java递归打印目录结构:如图,为什么把level+1换成++level就不行了
level = 0,假设同一个目录有三个文件夹,原本level+1的话,这三个文件打印时传入的level是1
每遍历一个文件都+1
⑷ 怎么写 java 递归解决删除文件夹以及子文件
import java.util.Scanner;
import java.io.*;
public class Del {
/**
* @删除文件或文件夹 chsNight
*/
public static String adders;
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
System.out.print("请输入要删除的文件地址:");
adders = input.next();
System.out.print("确定删除?(Y/N):");
String sfdel = input.next();
while (sfdel.equalsIgnoreCase("y")) {
del(adders);
break;
}
}
private static void del(String adders) {
File file = new File(adders);
if (file.isFile() == true) { // 如果是文件,直接删除
file.delete();
jg();
} else if (file.isDirectory() == true) { // 如果是文件夹
if (file.listFiles().length == 0) { // 如果是空文件夹
file.delete();
jg();
} else {
int zfiles = file.listFiles().length; // 子文件数量
File[] delfile = file.listFiles(); // 子文件路径
for (int i = 0; i < zfiles; i++) {
if (delfile[i].isDirectory()) {
del(delfile[i].getAbsolutePath()); // 递归调用del方法并取得子目录路径
}
System.out.println(delfile[i]);
delfile[i].delete();
}
file.delete();
jg();
}
} else {
System.out.println("删除失败:不存在该对象!");
}
}
public static void jg() {
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("\n" + adders + "删除成功!");
}
}
⑸ java 递归遍历文件夹
在main方法中填写要遍历的文件夹,就可以删除文件夹中的文件名以bmp和jpg结尾的文件。这个方法使用了递归思想
import java.io.*;
class FileTest
{
public static int cc=0;
public static void Sereach(File f)
{
if(f.isFile())
{
String str=f.getName().substring(f.getName().length()-4);
if(str.equals(".bmp")||str.equals(".jpg")||str.equals(".BMP")||str.equals(".JPG"))
{
f.delete();
System.out.println("删除"+f.getName());
cc++;
}
}
if(f.isDirectory())
{
File []ss=f.listFiles();
for(int i=0;i<ss.length;i++)
{
Sereach(ss[i]);
}
}
}
public static void main(String []args) throws Exception
{
File f=new File("D:\\picture");
Sereach(f);
System.out.println("一共删除了"+cc+"张bmp或jpg格式的图片");
}
}
⑹ JAVA遍历一个文件夹中的所有文件---(递归)
public void traverseFolder2(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("文件夹是空的!");
return;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夹:" + file2.getAbsolutePath());
traverseFolder2(file2.getAbsolutePath());
} else {
System.out.println("文件:" + file2.getAbsolutePath());
}
}
}
} else {
System.out.println("文件不存在!");
}
}
(6)java递归目录文件扩展阅读
public void traverseFolder1(String path) {
int fileNum = 0, folderNum = 0;
File file = new File(path);
if (file.exists()) {
LinkedList<File> list = new LinkedList<File>();
File[] files = file.listFiles();
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夹:" + file2.getAbsolutePath());
list.add(file2);
foldeNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
fileNum++;
}
}
File temp_file;
while (!list.isEmpty()) {
temp_file = list.removeFirst();
files = temp_file.listFiles();
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夹:" + file2.getAbsolutePath());
list.add(file2);
folderNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
fileNum++;
}
}
}
} else {
System.out.println("文件不存在!");
}
System.out.println("文件夹共有:" + folderNum + ",文件共有:" + fileNum);
}
⑺ java 如何递归遍历一个文件夹下的所有文件
代码如下:
importjava.io.File;
publicclassApp{
staticvoidlist(Stringpath){
Filedir=newFile(path);
File[]files=dir.listFiles();
if(files!=null&&files.length>0){
for(Filefile:files){
if(file.isFile()){
System.out.println(file.getAbsolutePath());
}elseif(file.isDirectory()){
list(file.getPath());
}
}
}
}
publicstaticvoidmain(String[]args){
list("D:\temp");
}
}
⑻ 如何用Java遍历一个网络目录下的所有文件
java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中。 假设指定路径为path,目标集合为fileList,遍历指定路径下的所有文件,如果是目录文件则递归调用
⑼ Java递归法读取文件目录
importjava.io.File;
publicclass${
publicstaticvoidmain(String[]args){
Stringpath="D:/";
test(path);
}
privatestaticvoidtest(Stringpath){
Filef=newFile(path);
File[]fs=f.listFiles();
if(fs==null){
return;
}
for(Filefile:fs){
if(file.isFile()){
System.out.println(file.getPath());
}else{
test(file.getPath());
}
}
}
}
⑽ 如何在指定目录下递归查找java类文件
在进行J2EE应用开发过程中,尤其是反编译现有java字节码文件来学习和研究过程中,经常会遇到编译时找不到所引用的类,编译器报错的问题。而该类定义可能已经存在某个目录或jar文件中,所以只要找到.class文件路径将其import进去或把jar文件加入 classpath中,问题也就得到解决。
通常,包含类定义的是.class文件和.jar文件。因此,在目录下递归判断每个文件,如果是.class文件,则比较文件名和要查找的类名是否一致;如果是.jar文件,则生成一个JarFile对象,并依次判断JarFile的JarEntry是否为要查找的类,并循环判断JarFile的所有entries对象名称是否和要查找的类名一致,如果一致,则说明该jar文件包含有要查找的类。下面的代码是笔者在项目开发过程中,用于解决实际问题且非常实用的程序。
(此文为文章摘要)