您的位置:首页 > 编程语言 > Java开发

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

2016-10-15 19:05 288 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java