`
剑&箫
  • 浏览: 53047 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java中文件的操作

    博客分类:
  • Java
 
阅读更多
文件可分为目录文件、标准文件、缓存文件三种,在Java中文件的表示有两种,一种是用的文件的路径字符串表示,另外一种是在Java的io包中用File对象表示文件。第一种表示很简单,但是对文件的各种操作不容易,用第二种表示可以运用File对象的各种方法对文件的各种操作。在此总结用File对象对指定文件路径中的标准文件的统计、对指定文件路径中目录文件的统计和对计算指定文件的大小以及对含有关键字的标准文件的查找。
首先要先定义一个FileTest类,然后再定义一个统计标准文件的方法countFile,给这个方法传入指定文件的路径,即String的形参,此方法还要返回标准文件的个数,即一个整型的返回值。方法的框架如下代码所示:
public class FileCount {
/**
* 统计指定路径下的标准文件个数
* @param path:指定的路径
* @return:返回标准文件个数
*/
public int countFile(String path){


}

}
在方法中首先要定义一个计数器来统计标准文件的个数,即int  count=0;现在要实例化一个File类的对象:java.io.File file = new java.io.File(path);创建一个File类的对象之后,首先要判断给定的路径文件是否存在,查阅API文档可知道用exists()可判断给定的文件路径是否存在,该方法返回的是一个boolean值,如果存在就返回一个true,否则返回false。如果给定的文件路径存在,则把该文件中的文件装入到一个文件对象数组中,在Java中可以用public  File[] listFiles()这个方法返回指定文件中的文件对象,所以首先要创建一个File数组:java.io.File[] array = file.listFiles();将文件中的文件对象装入数组之后,要判断数组是否为空,如果为空则说明给定的文件不是目录文件。如果数组不为空,则说明给定的文件是文件目录。给定的如果是文件目录,这时就要遍历File对象数组,判断给定文件目录中的文件对象是否是标准文件,如果是标准文件,则计数器加1。如果数组元素是目录文件,则又要重复上面的循环,这样循环下去,很麻烦!!如果用递归算法就很简单。递归算法就是方法调用方法本身。到此,对给定文件的标准文件的统计就完成了。具体代码如下:
/**
* 统计指定路径下的标准文件个数
* @param path:指定的路径
* @return:返回标准文件个数
*/
public int countFile(String path){
int count=0;//计数器

//创建文件对象
java.io.File file = new java.io.File(path);

//判断路径是否存在
if (!file.exists()){
System.out.println("给定的文件不存在!");
return 0;
}

//如果存在就将文件夹中的文件存到数组中
java.io.File[] array = file.listFiles();
//判断给定的是否是一个文件目录
if (array==null){
System.out.println("给定的文件不是文件目录!");
return 0;
}

//如果不执行上面两个判断则说明给定的是文件目录
//遍历文件对象数组
for (int i=0;i<array.length;i++){

//得到文件对象
java.io.File fl = array[i];
//得到文件对象的绝对路径
String str = fl.getAbsolutePath();

//判断是否是一个标准文件
if (fl.isFile()){
count++;
System.out.println("找到一个文件:"+str);
}else if (fl.isDirectory()){
count+=countFile(str);

}


}


return count;
}
比如对本人电脑上D:\xuexiruanjian文件进行统计,该文件在windows下得属性显示如下所示





运行结果:3550
运行结果与windows上统计的一样。

统计指定文件的目录文件的方法以及计算指定文件的大小和统计标准文件数的思路是一样的,只是在是否是目录文件时使用方法isDirectory()判断的。具体代码如下:
/**
* 统计指定路径下的文件夹个数
* @param path
* @return
*/
public int countDirectory(String path){
int count = 0;

//创建文件对象
java.io.File file = new java.io.File(path);

//判断给定的路径是否存在
if (!file.exists()){
System.out.println("给定的路径不存在!");
return 0;
}

//如果存在就将文件中的文件存到数组中
java.io.File[] arr = file.listFiles();
//判断给定的是否是一个文件目录
if (arr==null){
System.out.println("给定的不是一个文件目录");
return 0;
}
//遍历数组
for (int i=0;i<arr.length;i++){
java.io.File fl = arr[i];
String str = fl.getAbsolutePath();
if (fl.isDirectory()){
count++;
count+= countDirectory(str);
System.out.println("找到一个文件目录:"+str);
}
}

return count;
}
运行结果:735
结果与上面的给出的结果一样。

/**
* 统计指定路径下的文件总大小的方法
* @param path:指定的路径
* @return:返回总大小
*/
public long fileSize(String path){
long count = 0;

//创建文件对象
java.io.File file = new java.io.File(path);

//判断此路径是否存在
if (!file.exists()){
System.out.println("指定的路径不存在");
return 0;
}

//如果存在,则把该路径下的文件大小装入数组中
java.io.File[] arr = file.listFiles();
//判断文件是否是文件目录
if (arr==null){
System.out.println("给定的不是一个文件目录");
return 0;
}

//遍历文件数组
for (int i=0;i<arr.length;i++){
//得到文件对象
java.io.File fl = arr[i];
//得到文件绝对路径
String str = fl.getAbsolutePath();
//判断是否是标准文件
if (fl.isFile()){
count += fl.length();
}else if (fl.isDirectory()){
count+=fileSize(str);
}
}

return count;
}
运行结果:595782020
结果和上面给出的是一样的。

对指定含有关键字的文件进行查找的思路与上面对文件的操作差不多,先定义一个search 方法,再给该方法传入要在某个文件中查找文件的路径和关键字两个字符串类型参数。查找的方法是先判断给定的文件是否存在,如果存在再判断是否是目录文件,如果是目录文件,再对目录文件中的标准文件文件的路径是否含有给定的关键字的判断,这个判断要用到String类中的indexOf(String str)方法,该方法返回指定子字符串在此字符串中第一次出现处的索引,如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1。
如果目录文件中有目录文件则像上面一样运用递归算法,具体代码如下:
/**
* 查找指定文件下的文件名中包含指定字符串的文件
* @param path:给定的路径
* @param str:包含的字符串
*/
public void search(String path,String str){

//创建文件对象
java.io.File file = new java.io.File(path);

//判断此路径是否存在
if (!file.exists()){
System.out.println("指定的路径不存在");
return;
}

//如果存在,则把该路径下的文件大小装入数组中
java.io.File[] arr = file.listFiles();
//判断文件是否是文件目录
if (arr==null){
System.out.println("给定的不是一个文件目录");
return;
}

//遍历文件数组
for (int i=0;i<arr.length;i++){
//得到文件对象
java.io.File fl = arr[i];
//得到文件绝对路径
String st = fl.getAbsolutePath();
//判断是否是标准文件
if (fl.isFile()){
if (st.indexOf(str)!=-1){
System.out.println("文件:"+st);
}
}else if (fl.isDirectory()){
search(st,str);
}

}

}
比如对上面的文件夹查找含有java关键字的标准文件的查找,查找结果如下:


文件:D:\xuexiruanjian\Eclipse\eclipse\configuration\org.eclipse.osgi\bundles\320\1\.cp\icons\full\etool16\java_app.gif
文件:D:\xuexiruanjian\Eclipse\eclipse\configuration\org.eclipse.osgi\bundles\327\1\.cp\icons\full\etool16\javadoc.gif
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\about.html
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\epl-v10.html
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\feature.properties
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\feature.xml
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\license.html
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\META-INF\eclipse.inf
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\META-INF\ECLIPSEF.RSA
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\META-INF\ECLIPSEF.SF
文件:D:\xuexiruanjian\Eclipse\eclipse\features\org.eclipse.mylyn.java_feature_3.4.0.v20100608-0100-e3x\META-INF\MANIFEST.MF
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.activation_1.1.0.v201005080500.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.jws_2.0.0.v201005080400.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.mail_1.4.0.v201005080615.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.servlet.jsp_2.0.0.v200806031607.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.servlet_2.5.0.v200910301333.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.wsdl_1.5.1.v201005080630.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.wsdl_1.6.2.v201005080631.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.bind_2.0.0.v20080604-1500.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.bind_2.1.9.v201005080401.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\about.html
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\about_files\LICENSE
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\about_files\NOTICE
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\lib\jaxrpc.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\META-INF\eclipse.inf
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\META-INF\ECLIPSEF.RSA
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\META-INF\ECLIPSEF.SF
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\META-INF\MANIFEST.MF
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.rpc_1.1.0.v201005080400\plugin.properties
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\about.html
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\about_files\LICENSE
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\about_files\NOTICE
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\lib\saaj.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\META-INF\eclipse.inf
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\META-INF\ECLIPSEF.RSA
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\META-INF\ECLIPSEF.SF
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\META-INF\MANIFEST.MF
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.soap_1.2.0.v201005080501\plugin.properties
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.stream_1.0.1.v201004272200.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml.ws_2.1.0.v200902101523.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\javax.xml_1.3.4.v201005080400.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\java_cup.runtime_0.10.0.v201005080400.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\net.sourceforge.lpg.lpgjavaruntime_1.1.0.v201004271650.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.apache.ant_1.7.1.v20100518-1145\lib\ant-javamail.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.emf.importer.java_2.6.0.v20100521-1846.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.epp.package.jee_1.3.0.20100617-0521\javaee-ide_x16.png
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.epp.package.jee_1.3.0.20100617-0521\javaee-ide_x32.png
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.epp.package.jee_1.3.0.20100617-0521\javaee-ide_x48.png
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.mylyn.java.tasks_3.4.0.v20100608-0100-e3x.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.mylyn.java.ui_3.4.0.v20100608-0100-e3x.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.eclipse.wtp.javascript.capabilities_1.0.100.v201005102000.jar
文件:D:\xuexiruanjian\Eclipse\eclipse\plugins\org.mozilla.javascript_1.7.2.v201005080400.jar
文件:D:\xuexiruanjian\Java\jre6\bin\java-rmi.exe
文件:D:\xuexiruanjian\Java\jre6\bin\java.dll
文件:D:\xuexiruanjian\Java\jre6\bin\java.exe
文件:D:\xuexiruanjian\Java\jre6\bin\javacpl.exe
文件:D:\xuexiruanjian\Java\jre6\bin\javaw.exe
文件:D:\xuexiruanjian\Java\jre6\bin\javaws.exe
文件:D:\xuexiruanjian\Java\jre6\bin\java_crw_demo.dll
文件:D:\xuexiruanjian\Java\jre6\lib\javaws.jar
文件:D:\xuexiruanjian\Java\jre6\lib\security\java.policy
文件:D:\xuexiruanjian\Java\jre6\lib\security\java.security
文件:D:\xuexiruanjian\Java\jre6\lib\security\javaws.policy



  • 大小: 2.1 KB
0
14
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics