Java:文件类File的详解

File类的常用方法:

1、创建

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false.和输出流不一样,输出流对象一建立创建文件,而且文件已经存在会覆盖。

boolean mkdir():创建一级目录

boolean mkdirs():创建多级目录

2、删除

boolean delete():删除失败,返回false

void deleteOnExit():在程序退出时删除指定文件

3、判断

boolean canExecute():文件是否可执行

boolean exists():文件是否存在

boolean isDirectory():是否是目录

boolean isFile():是否是文件

boolean isHidden():文件是否隐藏

boolean isAbsolute():是否为绝对路径

4、获取信息

String getName():获取名称

String getParent():获取父目录

String getPath():获取路径

String getAbsolutePath():获取绝对路径

long lastModified():最后一次修改的时间

long length():文件的大小

5、修改

boolean renameTo(File dest):修改文件名

//例子1:

import java.io.*;
class FileDemo
{
    public static<T> void sop(T t)
    {
        System.out.println(t);
    }
    public static void main(String[] args)throws IOException
    {
        //Consmethod();
        //method_1();
        //method_2();
        //method_3();
        method_4();
    }

    public static void method_1()throws IOException
    {
        //创建文件
        File f = new File("F:\\myfile\\file.txt");
        //f.deleteOnExit();
        //sop("create:"+f.createNewFile());
        sop("delete:"+f.delete());

        //创建文件夹
        File dir = new File("F:\\File\\dir");
        sop("create:"+dir.mkdir());
        // File dir = new File("F:\\File\\dir\\aaa\\bb\\cc");
        // sop("create:"+dir.mkdirs());
    }
    public static void method_2()throws IOException
    {
        File f = new File("E:\\java0217\\Java IO\\File\\FileDemo.java");
        sop("canExecute():"+f.canExecute());
        sop("exists()):"+f.exists());
        //在判断文件目录是否是目录或文件时,必须先判断该文件对象封装的内容是否存在,通过上面的exists()判断。
        sop("isdir:"+f.isDirectory());
        sop("isfile:"+f.isFile());
        sop("isHidden:"+f.isHidden());
        sop("isAbsolute:"+f.isAbsolute());
    }
    public static void method_3()throws IOException
    {
        File f = new File("F:\\myfile\\file.txt");
        sop("getName:"+f.getName());
        sop("getParent:"+f.getParent());
        sop("getPath:"+f.getPath());
        sop("getAbsolutePath:"+f.getAbsolutePath());
        sop("lastModified:"+f.lastModified());
        sop("length:"+f.length());
    }
    public static void method_4()throws IOException
    {
       File f1 = new File("F:\\myfile\\file.txt");
       File f2 = new File("F:\\myfile\\fileDemo.txt");
       sop("renameTo:"+f1.renameTo(f2));
    }    

    //创建文件对象
    public static void Consmethod()
    {
        //将file.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象。

        //构造方法一File(String pathname)
        File f1 = new File("F:\\myfile2\\file1.txt");

        //构造方法二File(String parent, String child)
        File f2 = new File("F:\\myfile2","file2.txt");

        //构造方法三File(File parent, String child)
        File d = new File("F:\\myfile2");
        File f3 = new File(d,"file3.txt");

        //static String separator
        String s = File.separator;//默认当前系统下的分隔符。具有跨平台性
        File f4 = new File("F:"+s+"myfile2"+s+"file4.txt");

        sop("f1:"+f1);//f1:F:\myfile2\file1.txt
        sop("f2:"+f2);//f2:F:\myfile2\file2.txt
        sop("f3:"+f3);//f3:F:\myfile2\file3.txt
        sop("f4:"+f4);//f4:F:\myfile2\file4.txt
    }
}

获取文件目录数组:

String[] list()

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

String[] list(FilenameFilter filter)

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[] listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

File[] listFiles(FileFilter filter)

返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[] listFiles(FilenameFilter filter)

返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

static File[] listRoots()

列出可用的文件系统根。

//例子2:

import java.io.*;
class FileDemo2
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args)
    {
        //listRoots();
        //list();
        listFiles();
    }
    public static void listRoots()
    {
        File[] files = File.listRoots();
        for(File file: files)
        {
            sop(file);
        }
    }

    public static void list()
    {
        File f = new File("F:\\");
        String[] str = f.list();//调用list方法的file对象必须是一个封装的目录,而且还必须存在,否则返回空指针异常
        for(String s: str)
        {
            sop(s);
        }
    }

}

递归文件目录:

列出指定目录下的文件或文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容。

因为目录中还有目录,只要使用使用同一个列出目录的功能函数即可。

在此过程中出现的还是目录的话,还可以再次调用本功能。

也就是函数自身调用自身。

这种变现形式或者编程手法,称为递归。

递归要注意的:

1.必须有条件限制

2.要注意递归的次数,尽量避免内存溢出

//例子2:

import java.io.*;
class FileDemo3
{
    public static void main(String[] args)
    {
      showdir(new File("E:\\java0217"));
      // ToBin(6);
      // getsum(10);
      // int x = getsum(10);
      // System.out.println(x);
    }
    public static void showdir(File dir)
    {
        System.out.println(dir);
        File[] files = dir.listFiles();
        for(int i=0; i<files.length; i++)
        {
          if(files[i].isDirectory()==true)
              showdir(files[i]);//递归调用showdir()
          else
              System.out.println(files[i]);
        }
    }

    public static void ToBin(int num)
    {
        if(num>0)
        {
            ToBin(num/2);//递归调用ToBin()
            System.out.println(num%2);
        }
    }
    public static int getsum(int x)
    {
        if(x==1)
            return 1;
        else
            return x+getsum(x-1);//递归调用getsum()
    }
}

针对文件的应用举例如下:

练习一:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个文件列表文件.

思路:

1.将指定的目录进行递归

2.获取递归过程中所有java文件路径

3.将这些路径存储到集合中

4.将集合中的数据写入到文件中

import java.io.*;
import java.util.*;
class JavaFileList
{
    public static void main(String[] args)throws IOException
    {
        File dir = new File("E:\\java0217");
        ArrayList<File> al = new ArrayList<File>();
        filetolist(dir,al);
        System.out.println(al.size());
    }
    public static void filetolist(File dir,List<File> list)throws IOException
    {
        //System.out.println(dir);
        File[] files = dir.listFiles();
        for(int i=0; i<files.length; i++)
        {
          if(files[i].isDirectory())
              filetolist(files[i],list);
          else
          {
              files[i].getName().endsWith(".java");
              list.add(files[i]);
          }
        }
        BufferedWriter buf = new BufferedWriter(new FileWriter("F:\\myfile\\listjava.txt"));
        for(File f: list)
        {
            String str = f.getAbsolutePath();
            buf.write(str);
            buf.newLine();
            buf.flush();
        }
        buf.close();
    }
}

练习二:删除一个带内容的目录

删除原理:在window中,删除目录是从外往里删除的,既然是从外往里删除的,就要用到递归。

import java.io.*;
class RemoveDir
{
    public static void main(String[] args)
    {
        Removedir(new File("F:\\aaa"));
    }
    public static void Removedir(File dir)
    {
        File[] files  = dir.listFiles();
        for(int i=0; i<files.length; i++)
        {
          if(files[i].isDirectory()==true)
              Removedir(files[i]);//递归调用Removedir()
          else
              System.out.println(files[i].toString()+"-file-"+files[i].delete());
        }
        System.out.println(dir+"::dir::"+dir.delete());
    }
}
/*
F:\aaa\bbb\bb::dir::true
F:\aaa\bbb\ccc\a.txt.txt-file-true
F:\aaa\bbb\ccc::dir::true
F:\aaa\bbb::dir::true
F:\aaa::dir::true
*/

练习三:先切割文件(流),在合并文件(流)

import java.io.*;
import java.util.*;
class SplitFileDemo
{
    public static void main(String[] args)throws IOException
    {
        SplitFile();
        SequenceFile();
    }
    public static void SplitFile()throws IOException
    {
        FileInputStream fis = new FileInputStream("F:\\myfile\\b03.mp3");

        byte[] buf = new byte[1024*1024];

        int len = 0;
        int count=1;
        FileOutputStream fos = null;
        while((len=fis.read(buf))!=-1)
        {
            fos = new FileOutputStream("F:\\myfile\\splitfiles\\part"+(count++)+".suipian");//以1M为单位进行切割

            fos.write(buf,0,len);

            fos.close();
        }
        fis.close();

    }
    public static void SequenceFile()throws IOException
    {
        Vector<FileInputStream> v = new Vector<FileInputStream>();
        for(int i=1;i<=3;i++)
        {
            v.add(new FileInputStream("F:\\myfile\\splitfiles\\part"+i+".suipian"));
        }

        Enumeration<FileInputStream> enu = v.elements();
        SequenceInputStream sis = new SequenceInputStream(enu);//将多个流整合为一个流对象    

        FileOutputStream fos = new FileOutputStream("F:\\myfile\\splitfiles\\part123.mp3");
        byte[] buf = new byte[1024];
        int num = 0;
        while((num = sis.read(buf))!=-1)
        {
            fos.write(buf,0,num);
        }
        fos.close();
        sis.close();
    }
}

练习四:用于记录应用程序运行次数,如果使用次数已到,那么给出注册提示。

很容易想到是:计数器。

可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。

可是,随着该应用程序的退出,该计数器也在内存中消失。

下次启动程序,计数器重新从0计数,这不是我们想要的。

想要的是,即使程序结束,该计数器仍存在。

下次程序启动会先加载计数器的值并加1后重新存储起来。

所以,要建立一个配置文件,用于记录该软件的使用次数。

该配置文件使用键值对的形式,这样便于阅读和操作数据。

键值对数据是Map集合,数据是以文件形式存储,使用IO技术,那么Map+io----------->Properties

配置文件可以实现应用程序的共享。

import java.io.*;
import java.util.*;
class RunCount
{
    public static void main(String[] args)throws IOException
    {
        Properties prop = new Properties();
        File f = new File("F:\\myfile\\count.ini");//"count.properties"
        if(!f.exists())
            f.createNewFile();

        FileInputStream fis = new FileInputStream(f);

        prop.load(fis);

        int count=0;
        String value = prop.getProperty("time");
        if(value!=null)
        {
            count = Integer.parseInt(value);
            if(count>=5)
            {
                System.out.println("你好,使用次数已到,再用需要收费!");
                return ;
            }
        }
        count++;
        prop.setProperty("time",count+"");

        FileOutputStream fos = new FileOutputStream(f);

        prop.store(fos,"");

        fis.close();
        fos.close();
    }
}
时间: 2024-08-06 10:41:38

Java:文件类File的详解的相关文章

Java文件类File详解

java.io.File类 凡是与输入.输出相关的类.接口等都定义在java.io包下 File是一个类,可以有构造器创建其对象.此对象对应着一个文件(.txt .avi .doc .ppt .mp3 .jpg)或文件目录 File类对象是与平台无关的 File中的方法,仅涉及到如何创建.删除.重命名等等.只要涉及文件内容的,File是无能为力的,必须由io流来完成 File类的对象常作为io流的具体类的构造器的形参 一.createNewFile()  delete()  lastModifi

java之 ------ 类反射【详解】

一.什么是类反射 ★JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动 态调用对象的方法的功能称为Java语言的反射机制. 反射(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查, 也称自审,并能直接操作程序的内部属性.例如,使用它能获得Java类中各成员的名 称并显示出来. Java的这一能力在实际应用中应用得很多,在其它的程序语言中根本就

java嵌套类和内部类详解

可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner).嵌套类 从JDK1.1开始引入.其中inner类又可分为三种: 其一.在一个类(外部类)中直接定义的内部类: 其二.在一个方法(外部类的方法)中定义的内部类: 其三.匿名内部类. java嵌套类(Nested Classes)总结 http://www.cnblogs.com/aigongsi/a

Java研究之文件路径的读取详解

 记得在操作系统中了解到文件读取有两种方式,当然这在各编程语言中也是通用的,所以java路径也分,相对和绝对路径.上章我们分享了Java研究之学习设计模式-组合模式详解有兴趣的朋友可以去看下. 绝对路径 绝对路径URI ,听着和URL很相似,那我们就来看看吧. URI(Uniformresource Identifier)统一资源标示符.URL统一资源定位符,是一个定位器,还说明了具体如何找到资源.所以他们就有一种抽象和继承的关系.URI抽象的说明了统一资源表示符号,而URL是具体的标识符的

java中的io系统详解

java中的io系统详解 分类: JAVA开发应用 笔记(读书.心得)2009-03-04 11:26 46118人阅读 评论(37) 收藏 举报 javaiostreamconstructorstringbyte 相关读书笔记.心得文章列表 Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他

Java虚拟机之垃圾回收详解一

Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这些程序包括:实用程序.游戏.商业应用程序.在全世界范围内,Java运行在超过数十亿台个人计算机上,数十亿台设备上,还包括手机和电视设备.Java由一系列的关键组件作为一个整体构建出了Java平台. Java Runtime Edition 当你下载Java,你就得到了Java运行环境(JRE).JR

java虚拟机启动参数分类详解

官方文档见: http://docs.sun.com/source/819-0084/pt_tuningjava.html java启动参数共分为三类:其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容:其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用: 一.标准参数中比较有用的: verbose -verbo

java中System.getProperty()方法详解

java中System.getProperty()方法详解,如下: System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号 System.out.println("Java提供商名称:" + System.getProperty("java.vendor")); // Java提供商名称 System.out.println

关于JAVA项目中CLASSPATH路径详解

自己看完总结:配置中"classpath: " 相当于输出目录,即编译后的class文件 所在目录:而 "file:" 是 启动目录而言,14 上服务器就是WEB-INF 下目录,本地项目就是项目根目录. 关于JAVA项目中CLASSPATH路径详解 分类: Java 2013-03-14 10:52 6845人阅读 评论(1) 收藏 举报 在dos下编译java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候.classpath就是存放.c