类 File
File是指文件和目录路径名的抽象表示形式。
1,何为文件:
标准文件(txt doc mp3...)
目录文件(文件夹)
虚拟内存文件
2,File类中有可以创建文件的 createNewFile()方法,在创建新文件的时候需要try{} catch(){}因为可能会抛出异常;也有可以判断文件是否是一个标准文件的方法isFile();这些防抖都在java.io的输入输出包中,我们可以直接创建一个文件对象后 再来 调用
3,使用File类来测试:
package file0521;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//获取文件的路径
String path = "abc\\a.txt";
//用对象表示可以操作对象
File file = new File(path);
//创建文件夹
boolean b=file.mkdirs();
System.out.println(b);
//获取绝对路径
String path1 = file.getAbsolutePath();
//File path1 = file.getAbsoluteFile();
System.out.println("绝对路径 :"+path1);
//获取相对路径
String path2 = file.getPath();
System.out.println("相对路径 :"+path2);
//获取文件的名称
String name=file.getName();
System.out.println("getName:"+name);
long len = file.getFreeSpace();
System.out.println("getfree:"+len);
}
}
运行结果
false
绝对路径 :E:\java\文件的处理\abc\a.txt
相对路径 :abc\a.txt
getName:a.txt
getfree:114963243008
分析:String path = "abc\\a.txt";是先获取这个路径 \\是分隔符号
创建File的对象,将路径作为其参数;由于文件夹已经是存在的所以返回为false;
文件的描述;使用字符串表示文件的路径
使用对象表示对象
绝对路径:从根磁盘开始计算的路径
相对路径:某一文件相对于当前文件的路径
后面的应该能看懂了;
2,使用File来判断输入的路径是文件还是文件夹?
思路分析:
a,写一个方法,将需要所有关的全部写入到这个方法中封装起来
b,创建File的对象并将路径传入其作为参数
c,判断路径是否存在
d,如果存在就保存在数组中
f,判断数组中是否为空
e,遍历数组
G,如果是文件就+1
h,入伏哦是文件夹就+1,文件夹中如果还有文件夹就调用递归
代码如下:
package file0521;
/**
* 编写一个统计文件标准文件的个数
* @author Administrator
*
*/
import java.io.*;
public class TestFile {
public static void main(String[] args) {
String path = "F:\\java开发实例1200";
int count =countFile(path);
System.out.println("文件有"+count+"个");
}
static int result= 0;
public static int countFile(String path){
//创建file的对象
File file = new File(path);
//判断路径是否存在
if(!file.exists()){
System.out.println("提供的路径不存在!");
return 0;
}
//将的得到的路径存储到数组中
File[] fs =file.listFiles();
//判断得到的是否是一个文件
if(fs==null){
System.out.println("提供的路径不是一个标准文件");
return 0;
}
//遍历数组
for(int i =0;i<fs.length;i++){
File f = fs[i];
String str = f.getAbsolutePath();
if(f.isFile()){
result++;
System.out.println("找到文件"+str);
}else if(f.isDirectory()){
//调用递归来处理
result +=countFile(str);
}
}
return result;
}
}
运算结果:
文件有240489911个
递归;程序调用自身的编程技巧称为递归,就是自己调用自己的方法等,递归有时候可以用循环来代替,
4,任务:统计文件夹的子文件统计一个文件夹的类型,位子,大小,最后一次修改的时间
(第一版)分析:将文件夹和文件的判断写入一个static方法中,将共同的属性又写一个静态的方法,然后分别条用属性的方法
package file0521;
import java.io.*;
/**
*
* @author
* 统计文件文件或者文件夹的属性
*
*/
public class Demofile {
public static void main(String[] args) {
String path = "E:\\c语言\\c 练习\\interface.cpp";
wenjian(path);
}
public static void wenjian(String path) {
File file = new File(path);
// 文件是否存在
// boolean f1 = file.exists();
if (file.exists()) {
// 判断是不是一个isFile();
if (file.isFile()) {
System.out.println("文件!!!");
shuxing(file);
} else if(file.isDirectory()){
System.out.println("文件夹!!");
shuxing(file);
}else{
System.out.println("类型无法判断!!!");
}
} else {
System.out.println("文件不存在!请重新输入路径");
}
}
public static void shuxing(File file) {
long len= file.length();
System.out.println("文件的长度"+len);
//最后一次修改的时间
long lasttime = file.lastModified();
System.out.println("最后一次修改的时间"+lasttime);
//是否隐藏
boolean f3 =file.isHidden();
System.out.println("是否隐藏"+f3);
//是否可写
boolean f4 = file.canRead();
System.out.println("是否可读"+f4);
//是否可读
boolean f5=file.canWrite();
System.out.println("是否可读"+f5);
//获取绝对路径
String str1 = file.getAbsolutePath();
System.out.println("获取绝对路径"+str1);
//获取文件的名称
String name=file.getName();
System.out.println("获取文件的名称"+name);
//返回空闲的空间
long freespace = file.getFreeSpace();
System.out.println("返回空闲的空间"+freespace);
}
}
运行结果:(没有得到文件及文件夹的个数)
文件!!!
文件的长度2900
最后一次修改的时间1395579617531
是否隐藏false
是否可读true
是否可读true
获取绝对路径E:\c语言\c 练习\interface.cpp
获取文件的名称interface.cpp
返回空闲的空间114963243008
5,任务:统计文件夹的子文件统计一个文件夹的类型,位子,大小,最后一次修改的时间(本方法可以判别文件夹和文件的个数,但是没有都会判断 其属性,导致运行结果非常乱)
分析:将文件夹和文件的判断写入一个static方法中,在方法中判断文件和文件夹的个数,将共同的属性又写一个静态的方法,然后分别条用属性的方法
代码如下:
package file0521;
import java.io.File;
public class Filezuoye {
static int count;//文件的个数
static int dir;//目录的个数
static long size;//大小
public static void main(String[] args) {
String path ="C:\\Users\\Administrator\\Desktop\\html";
shuxing(path);
System.out.println("统计完毕,共有" + count + "个文件");
System.out.println("共有" + dir + "个文件夹");
System.out.println("总大小" + size + "B");
}
public static void shuxing(String path){
File file = new File(path);
if(!file.exists()){
System.out.println("这不是一个文件!");
return;
}
//将得到的子文件保存到数组里面
File[] f =file.listFiles();
if(f==null){
System.out.println("不是正确的路径");
}
for(int i = 0;i<f.length;i++){
File fs=f[i];
//显示获取到的路径
String str = fs.getAbsolutePath();
//如果是文件
if(fs.isFile()){
count++;
//累加获取到的文件的大小
size = size + fs.length();
System.out.println("文件的路径 : " + str);
same(file);
}else if(fs.isDirectory()){
dir++;
//如果是文件夹就调用用递归来重新统计
shuxing(str);
same(file);
}else{
}
}
}
public static void same(File file){
//最后一次修改的时间
long lasttime = file.lastModified();
System.out.println("最后一次修改的时间"+lasttime);
//是否隐藏
boolean f3 =file.isHidden();
System.out.println("是否隐藏"+f3);
//是否可写
boolean f4 = file.canRead();
System.out.println("是否可读"+f4);
}
}
运行结果:
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\css\text.css
最后一次修改的时间1399284088057
是否隐藏false
是否可读true
最后一次修改的时间1399284108953
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\ad1.gif
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\arrow_list.gif
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\banner.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\footbg.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\link1.gif
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\link2.gif
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\navbg.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\navbg2.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\titlebg.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\images\title_nt_1.jpg
最后一次修改的时间1399284035123
是否隐藏false
是否可读true
最后一次修改的时间1399284108953
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\webpage\index.html
最后一次修改的时间1399284108953
是否隐藏false
是否可读true
最后一次修改的时间1400502634106
是否隐藏false
是否可读true
文件的路径 : C:\Users\Administrator\Desktop\html\网页.zip
最后一次修改的时间1400502634106
是否隐藏false
是否可读true
统计完毕,共有13个文件
共有3个文件夹
总大小53794B
结果分析:运行的结果每次都会调用属性,有多少个文件盒文件夹就会调用多少次;导致程序的可读性较差