利用File类来实现对文件和文件夹数目的统计

java 种的File类的作用和用处如下:
1.直接处理文件和文件系统。File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File 对待,它具有附加的属性——一个可以被 list( )方法检测的文件名列表。

2.下面的构造函数可以用来生成File 对象:

    File(String directoryPath)
    File(String directoryPath, String filename)
    File(File dirObj, String filename)

这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象。下面的例子创建了三个文件:f1,f2,和f3。第一个File对象是由仅有一个目录路径参数的构造函数生成的。第二个对象有两个参数——路径和文件名。第三个File对象的参数包括指向f1文件的路径及文件名。f3和f2指向相同的文件。

File f1 = new File("/");
File f2 = new File("/","autoexec.bat");
File f3 = new File(f1,"autoexec.bat");

注意:Java 能正确处理UNIX和Windows/DOS约定路径分隔符。如果在Windows版本的Java下用斜线(/),路径处理依然正确。记住,如果你用Windows/DOS使用反斜线(/)的约定,你需要在字符串内使用它的转义序列(//)。Java约定是用UNIX和URL风格的斜线来作路径分隔符。

对文件名称的获取:

public static void getAllFiles(File dir)
  {
    System.out.println("文件夹;"+dir.getName());
    File[] files=dir.listFiles();
    for(int i=0;i<files.length;i++)
    {
      if(files[i].isDirectory())
      {
        getAllFiles(files[i]); //这里面用了递归的算法
      }
      else {
        System.out.println("文   件;"+files[i].getName());
      } 
    }        
  }

dir.getName():获取当前地址的文件夹名称。
File[] files=dir.listFiles(); listFile() 返回一个抽象路径名 数组,这些路径名表示目录中的文件,也就是说这个是一个完整的路径(list() 则是返回一个字符串数组,也就是将文件夹中的文件名存储)。
getAllFiles(files[i]):递归算法,通过对文件数目(files.length数组.length就是取得数组的长度。)的判断,来对文件夹的名称进行输出。
files[i].getName():对于文件名称的输出,有files[i]和files[i].getName()两种方式。files[i]是输出整个文件的完整目录(D: \windows\NW382_NW332\setup.exe)。而files[i].getName()则是输出文件的文件名(setup.exe)。

对文件大小的获取:

    File dirs = files.getAbsoluteFile();
    String dirs2=dirs.toString();
    getSize(dirs2);
    public static long getSize (String dirs2){
        File dirs =new File(dirs2);
        long dir=dirs.length()/1024  ;
        return dir;
    }

files.getAbsoluteFile():返回的是一个字符串,这个字符串就是当前File对象的绝对路径名的字符串形式。
getAbsoluteFile():返回的是一个File类对象,这个File对象表示是当前File对象的绝对路径名形式
String dirs2=dirs.toString():在获得了文件的地址信息后。需要将file的File类型强制转换成String类,以便于计算文件的大小。

通过对getSize方法的调用来对文件的大小进行计算,在getSize方法中,首先File dirs=newFile(dirs2):需要创建一个地址对象也就是 File dirs=newFile(dirs2) 在利用dirs.length()来计算当前文件的大小。获取的值应该是一个long类型(可以对dirs.length进行强制的int类型转化(int)(dirs.length() 结果显示错误),再将获取的值返回至主函数中。

文件修改时间的获取:
在java中,可以使用java.io.File.lastModified()方法来表示抽象路径名的文件的最后修改时间。

public static String getTime(String dirs2){   
    File f = new File(dirs2);               
    Calendar cal = Calendar.getInstance();  
    long time = f.lastModified();  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    cal.setTimeInMillis(time); 
    return formatter.format(cal.getTime());
}

但是使用lastModeified()方法的输出结果的格式为Sat Jun 09 21:36:21 IST 2012 这显然是不符合我们的阅读习惯,这个时候就需要使用 SimpleDateFormant方法来将获取到的日期值格式化成自己需要的方式。
SimpleDateFormat: 允许以为日期-时间格式化选择任何用户指定的方式启动:

    SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
    SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); 
    SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
    SimpleDateFormat myFmt4=new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");

cal.setTimeInMillis(time):但是在对于文件时间的获取中,会计算出相对于1970年0点0分0秒走过的毫秒数。为此我们使用setTimeInMillis来计算出经过time毫秒后的时间。返回一个formatter.format(cal.getTime());值。
通过SimplDateFormat方法可以发现,我们可以直接对time参数进行调用,这样的话,返回的将会是formatter.format(time);
修改后的代码:

public static String getTime(String dirs2){   
    File f = new File(dirs2);               
    //Calendar cal = Calendar.getInstance();  
    long time = f.lastModified();  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //cal.setTimeInMillis(time);  
    //formatter.format(time);
    return formatter.format(time);
}

输出内容存储至文本文件:
将输出内容保存,在这个方面我们会使用到File中IO文件操作类来创建输入输出流。
Java.io.FileOutputStream类:java.io.FileOutputStream类是用于将数据写入一个文件或FileDescriptor的输出流。包括以下两个要点:
这个类是指用于记录的原始字节,例如图像数据流。
写字符流,可以使用文件字符FileWriter
具体应用流程:
将给定路径字符串转换为抽象路径名来创建一个File实例:

File dirs = new File("D:\\text2.txt");

创建流文件写出类fs:
FileOutputStream fs = new FileOutputStream(dirs);
PrintStream在OutputStream基础之上提供了增强的功能,即可以方便地输出各种类型的数据(而不仅限于byte型)的格式化表示形式。PrintStream的方法从不抛出IOEceptin。

PrintStream p = new PrintStream(fs);

进行输出存储:

p.println(" ")

完整代码:

package file2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;

public class GetFiles {

    public static long getSize (String dirs2){
        File dirs =new File(dirs2);
        long dir=dirs.length()/1024  ;
        return dir;
    }

    public static String getTime(String dirs2){   
        File f = new File(dirs2);               
        long time = f.lastModified();  

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         
        return formatter.format(time);
    }   

    public static void getAllFiles(File dir, FileOutputStream fs)
    {
        System.out.println("文件夹;"+dir.getName());
        PrintStream p = new PrintStream(fs);
        File[] files = dir.listFiles();
        for(int i=0;i<files.length;i++){
            if(files[i].isDirectory()){
                getAllFiles(files[i],fs);
            }else{
                File dirs=files[i].getAbsoluteFile();
                String dir2=dirs.toString();
                System.out.println("文   件;"+files[i]+";文件大小;"+getSize(dir2)+";修改时间;"+getTime(dir2));
                p.println("文   件;"+files[i].getName()+";文件大小;"+getSize(dir2)+"KB;"+"修改时间;"+getTime(dir2));
            }
        }
    }

    public static void main(String[] args) throws IOException
    {
        FileOutputStream fs = new FileOutputStream(new File("D:\\text2.txt"));
        File dir=new File("D://OneDrive");
        getAllFiles(dir,fs);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值