API--File操作(1)

本文深入讲解Java中File类的基本用法及注意事项,包括路径创建、文件操作、属性获取等核心功能,并通过实例演示如何实现文件夹创建、文件读取、文件夹内容筛选等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:知识点总结

1.File类只用于表示文件(目录)的信息,不能对文件的内容进行访问。

2.创建File对象时候的路径问题

(1)File file=new File(“绝对路径”);

“绝对路径”:

1)windows:

  1. “d:/test” -------Java提供的自动处理的方法,程序员比较常用
  2. “d:\\test”-----转义字符
  3. “d:”+File.separator+”test”

2)Linnux/Unix/Mac

A.”/home/soft01/test”

B.  ”/home/soft01/”+File.separator+”test”

(2)File file=new File(“相对路径”);

相对路径:Windows和Linux没有差别

如:”demo/test”   -------为了方便,跨平台,经常使用相对路径

相对的起点位置:main方法的启动路径,在Eclipse中是当前项目文件夹

File f=new Flie(“demo”);

f.mkdir()

提示:抽象路径应尽量使用相对路径,并且目录的层级分隔符不要直接写”/”或”\”,应使用File.separator这个常量表示,以避免不同系统带来的差异。

3. 构造方法:
      (1)File file=new File(“name”);

      (2)File parent= new File(“demo”);

        File file= new File(parent,name);

二:代码练习:

 1. 利用File API创建了文件夹,文件

1 //只是在内存中创建一个对象,硬盘上没有文件夹
2 File file=new File("e:"+File.separator+"fileTest");

//在硬盘上创建文件夹,返回值为true,创建成功(原先没有)

反之,创建失败(已经有文件夹或文件)

1 boolean ok=file.mkdir();
2 System.out.println(ok);

//同理,创建文件----注意此处抛出异常,需要加上throws IOException

1 File f=new File("e:"+File.separator +"fileTest"+File.separator+"test.txt");
2   boolean ok=f.createNewFile();
3   System.out.println(ok);

2.//在当前文件夹中创建一个新的文件夹demo

 “当前文件夹”就是当前项目的文件夹!使用刷新(F5)查看结果

  “其中“demo”参数是相对路径

//在demo文件夹中创建文件

1   File f=new File("demo");
2   f.mkdir();
3   File file=new File("hello");
4   file.createNewFile();

//访问f指向的demo文件夹中的文件

1 File a=new File(f,"test.txt");
2   a.createNewFile();

//在demo文件夹中创建一个子文件夹

1 File file1=new File(f,"one");
2   file1.mkdir();

3. 一次在硬盘上创建系列路径(多级文件夹)

1 File file = new File("myhome/job/days/day01/am");
2 file.mkdirs();

4. //file.exists()用于检查硬盘上是否存在文件,文件夹

  // file.isFile()如果被检查的是文件返回true

   //file.isDirectory()如果检查的是文件夹返回true

1 boolean found=file.exists();
2  System.out.println(found);
3   boolean f=file.isFile();
4   boolean d=file.isDirectory();
5   System.out.println(f);
6   System.out.println(d);

5. 访问已经存在的文件,获取文件相关的信息

1 File file = new File("D:/Welcome.html");
2       //文件的长度:文件中字节数据个
3       long l = file.length();
4        System.out.println(l); 
5        System.out.println(l/1024D); 
6       //文件的最后last修改Modify时间----

输出的是里面文件夹里(包括子文件的最后修改时间)

1   long time = file.lastModified();
2        SimpleDateFormat format = 
3               new SimpleDateFormat(
4                   "yyyy-MM-dd HH:mm:ss");
5         System.out.println(format.format(time));
6         System.out.println(file.canWrite());

6. delete() 删除one指向的硬盘文件,不能删除有内容的文件夹(文件夹含有子文件或者子文件夹不可以)!

1 File one = new File("demo", "one");
2  boolean ok = one.delete();
3  System.out.println(ok);//true

7. 在Linux上以.开头的文件或文件夹是隐藏的

        File file2 = new File(".home");

8. 将file指向的文件夹(文件) 改名为 file2 的名字,返回true表示修改成功

9.  改名 将file指向的文件夹(文件) 改名为 file2 的名字,

返回true表示修改成功,

1 File file2 = new File("myhome");
2 File file = new File("home");
3 boolean success=file.renameTo(file2);
4 System.out.println(success);

注意:file2一定不能在硬盘中创建,输出false。而file必须是已经创建的文件夹

10. 在文件或者不存在的文件上调用了 listFiles(),底层出现IO错误时候,返回null!

11. 在文件夹上调用listFiles() 方法,返回文件夹的全部内容(子文件、文件夹)

含隐藏文件!返回File类型的数组,元素是文件夹或文件

1 File myhome=new File("myhome");
2  File[] files=myhome.listFiles();
3   System.out.println(Arrays.toString(files));

注意:只输出myhome\job,job下面的子文件夹不会输出

12.

 1  /**
 2 
 3     * 计算一个目录中全部文件的总长度,只检索当前目录中的文件总长度,不包含子文件夹
 4 
 5     * @param dir 目录名
 6 
 7     * @return 文件的总长度
 8 
 9     * @throws FileNotFoundException 文件
10 
11     * 夹不存在,或者不是文件夹时候抛出异常。
12 
13     */
14 
15 public class IOUtils {
16 
17    public static long size(String dir)
18 
19         throws FileNotFoundException{
20 
21         /*
22 
23          * 创建File对象
24 
25          * 检查是否存在,抛出异常!
26 
27          * 检查是否是文件夹! 抛出异常!
28 
29          * 获取文件的全部内容(子文件、子文件夹)。
30 
31          * 遍历全部内容。
32 
33          * 如果是文件(isFile())的时候
34 
35          * 统计文件的长度。
36 
37          * 返回统计结果
38 
39          */
40 
41         File file = new File(dir);
42 
43         //exists 存在 
44 
45         if(! file.exists()){
46 
47               //抛异常是方法的结束,是不正确结束!
48 
49               throw new FileNotFoundException(
50 
51                          "文件夹不存在:"+dir);
52 
53         }
54 
55         //file已经存在,检查是文件吗
56 
57         if(file.isFile()){
58 
59               throw new FileNotFoundException(
60 
61                          "不是文件夹:"+dir); 
62 
63         }
64 
65         //获取文件夹全部内容(子文件、文件夹)
66 
67         File[] files = file.listFiles();
68 
69         //File[] files = file.listFiles(onlyFile);
70 
71         //统计文件的长度
72 
73         long count = 0;
74 
75         for(File f:files){
76 
77               //f 代表文件夹中的子文件、文件夹
78 
79               if(f.isFile()){
80 
81                    count+=f.length();
82 
83               }
84 
85               //count+=f.isFile()?f.length():0;
86 
87         }  
88 
89         return count;
90 
91    }
92 
93 }

测试

 1 public static void main(String[] args) throws IOException {
 2 
 3         // TODO Auto-generated method stub
 4 
 5         File file=new File("Demo/demo.txt");
 6 
 7         file.createNewFile();
 8 
 9         try{
10 
11               long s=IOUtils.size("Demo/demo.txt");
12 
13               System.out.println(s);
14 
15               System.out.println(s/1024D/1024);
16 
17         }catch(FileNotFoundException e){
18 
19               e.printStackTrace();
20 
21         }
22 
23    }

注意:出现问题,不知道为什么?

Exception in thread "main"java.lang.NullPointerException

long s=IOUtils.size("Demo/demo.txt");

public static void main(String[] args) {

13.  有条件的获取文件夹的内容

//定义过滤器,只接受文件

 1 /**
 2  * 判断给定参数 file 是否是可接受的结果。
 3 
 4  * 如果file是需要的对象返回true,否则返回false
 5 
 6  */
 7         FileFilter onlyFile = new FileFilter(){
 8               //accept 接受
 9                 public boolean  accept(File file) {
10                    return file.isFile();
11               }
12         };
13      //匿名内部类结束以后
14         File dir = new File("d:/");
15         /**
16 
17          * listFiles 方法会自动的调用 onlyFile
18 
19          * 中的accept 方法,将满足条件的文件留下
20 
21         * 来作为结果,不满足的抛弃。
22 
23          */
24         File[] files = dir.listFiles(onlyFile);
25         for (File file : files) {
26              //getName 返回文件的名字
27          System.out.println(file.getName()); 
28        }
29    }

三.问题疑问

1. 获取文件中字节长度,依据是什么?为什么有的文件夹输出是0,有的几个文件夹的输出比较固定?都是

1    File file3=new File("e:/1.JavaProgram");
2    long l=file3.length();
3    System.out.println(l);
4 System.out.println(l/1024D);

输出:4096   4.0

1    File file3=new File("e:/1. 0.eclipse");
2    long l=file3.length();
3    System.out.println(l);
4    System.out.println(l/1024D);

输出:0   0.0

答案:File.length()的话如果读取的是一个文件夹  那么字节是不固定的?????

2.以下代码为什么在项目文件夹中刷新显示删除了文件,但是输出file是还有删除的文件,输出结果还是myhome/job/days/day01/am, 但是file5.exists()输出语句返回false

1 File file5=new File("myhome/job/days/day01/am");
2             System.out.println(file5.delete());
3              System.out.println(file5);
4 System.out.println(file5.exsits());

 

3.在当前目录下建立三个文件,如果两个文件名拼写相同(大小写不一样时)时,为什么刷新不出后来建立的,但是输出表示已经建立了文件夹,输出:三个true?????

1     File file=new File("demo");
2     file.mkdir();
3     System.out.println(file.exists());
4     File file1=new File("Demo");
5     file1.mkdir();
6     System.out.println(file1.exists());
7     File file2=new File("mo");
8     file2.mkdir();
9     System.out.println(file2.exists());

 

转载于:https://www.cnblogs.com/liuxu0310/p/5017950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值