码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习笔记-File操作(API)

时间:2015-12-04 00:46:56      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

 

一:知识点总结

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创建了文件夹,文件

//只是在内存中创建一个对象,硬盘上没有文件夹

File file=new File("e:"+File.separator+"fileTest");

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

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

boolean ok=file.mkdir();

System.out.println(ok);

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

  File f=new File("e:"+File.separator +"fileTest"+File.separator+"test.txt");

  boolean ok=f.createNewFile();

  System.out.println(ok);

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

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

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

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

  File f=new File("demo");

  f.mkdir();

  File file=new File("hello");

  file.createNewFile();

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

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

  a.createNewFile();

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

  File file1=new File(f,"one");

  file1.mkdir();

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

File file = new File("myhome/job/days/day01/am");

  file.mkdirs();

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

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

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

  boolean found=file.exists();

 System.out.println(found);

  boolean f=file.isFile();

  boolean d=file.isDirectory();

  System.out.println(f);

  System.out.println(d);

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

File file = new File("D:/Welcome.html");

      //文件的长度:文件中字节数据个

       long l = file.length();

       System.out.println(l);

       System.out.println(l/1024D);

      //文件的最后last修改Modify时间----

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

        long time = file.lastModified();

        SimpleDateFormat format =

              new SimpleDateFormat(

                   "yyyy-MM-dd HH:mm:ss");

        System.out.println(format.format(time));

        System.out.println(file.canWrite());

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

File one = new File("demo", "one");

          boolean ok = one.delete();

      System.out.println(ok);//true

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

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

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

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

返回true表示修改成功,

File file2 = new File("myhome");

File file = new File("home");

      boolean success=file.renameTo(file2);

      System.out.println(success);

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

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

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

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

File myhome=new File("myhome");

   File[] files=myhome.listFiles();

   System.out.println(Arrays.toString(files));

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

12.

 /**

    * 计算一个目录中全部文件的总长度,只检索当前目录中的文件总长度,不包含子文件夹

    * @param dir 目录名

    * @return 文件的总长度

    * @throws FileNotFoundException 文件

    * 夹不存在,或者不是文件夹时候抛出异常。

    */

 

public class IOUtils {

   public static long size(String dir)

        throws FileNotFoundException{

        /*

         * 创建File对象

         * 检查是否存在,抛出异常!

         * 检查是否是文件夹! 抛出异常!

         * 获取文件的全部内容(子文件、子文件夹)。

         * 遍历全部内容。

         * 如果是文件(isFile())的时候

         * 统计文件的长度。

         * 返回统计结果

         */

        File file = new File(dir);

        //exists 存在

        if(! file.exists()){

              //抛异常是方法的结束,是不正确结束!

              throw new FileNotFoundException(

                         "文件夹不存在:"+dir);

        }

        //file已经存在,检查是文件吗

        if(file.isFile()){

              throw new FileNotFoundException(

                         "不是文件夹:"+dir);

        }

        //获取文件夹全部内容(子文件、文件夹)

        File[] files = file.listFiles();

        //File[] files = file.listFiles(onlyFile);

        //统计文件的长度

        long count = 0;

        for(File f:files){

              //f 代表文件夹中的子文件、文件夹

              if(f.isFile()){

                   count+=f.length();

              }

              //count+=f.isFile()?f.length():0;

        }

       

        return count;

   }

}

测试

public static void main(String[] args) throws IOException {

        // TODO Auto-generated method stub

        File file=new File("Demo/demo.txt");

        file.createNewFile();

        try{

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

              System.out.println(s);

              System.out.println(s/1024D/1024);

        }catch(FileNotFoundException e){

              e.printStackTrace();

        }

   }

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

Exception in thread "main"java.lang.NullPointerException

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

public static void main(String[] args) {

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

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

/**

       * 判断给定参数 file 是否是可接受的结果。

 * 如果file是需要的对象返回true,否则返回false

 */

        FileFilter onlyFile = new FileFilter(){

              //accept 接受

                public boolean  accept(File file) {

                   return file.isFile();

              }

        };

        //匿名内部类结束以后

        File dir = new File("d:/");

        /**

         * listFiles 方法会自动的调用 onlyFile

         * 中的accept 方法,将满足条件的文件留下

         * 来作为结果,不满足的抛弃。

         */

        File[] files = dir.listFiles(onlyFile);

        for (File file : files) {

              //getName 返回文件的名字

              System.out.println(file.getName());

        }

   }

三.问题疑问

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

    File file3=new File("e:/1.JavaProgram");

   long l=file3.length();

   System.out.println(l);

System.out.println(l/1024D);

输出:4096   4.0

  File file3=new File("e:/1. 0.eclipse");

   long l=file3.length();

   System.out.println(l);

System.out.println(l/1024D);

输出:0   0.0

 

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

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

File file5=new File("myhome/job/days/day01/am");

            System.out.println(file5.delete());

             System.out.println(file5);

System.out.println(file5.exsits());

 

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

File file=new File("demo");

    file.mkdir();

    System.out.println(file.exists());

    File file1=new File("Demo");

    file1.mkdir();

    System.out.println(file1.exists());

    File file2=new File("mo");

    file2.mkdir();

    System.out.println(file2.exists());

 

Java学习笔记-File操作(API)

标签:

原文地址:http://www.cnblogs.com/liuxu0310/p/5017950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!