【Java学习】Java IO-File类的理解和总结

来源:互联网 发布:小米id解锁软件 编辑:程序博客网 时间:2024/05/29 03:22

File 文件流

  • 理解
    磁盘上的文件系统 要么是文件 要么是目录
    注意 path的格式有两种:D:\parogram\file.txt或者D:/program/file.txt
    \第一个\是转义字符 第二个在wiindows中代表目录
    /在java中仅仅表示一个字符。
    详细请看java 正斜杠与反斜杠之分

  • 限制
    只能对文件进行添加删除的操作,无法对文件中的内容进行修改

  • 构造方法
        File(String path)        File(String path,String filename)        File(File file,String filename)
  • 一般方法
boolean Exists()判断File对象是否存在String getName();File getPath(); 将file类转化为字符串String getParent(); 得到该类上一级路径的字符串形式File getParentFile(); 得到该类上一级路径的file类形式boolean isDirectory() 判断是否是目录boolean isFile() 判断是否为文件String[] list() 返回字符串数组显示所有的目录和文件File[] listFile() 封装到file对象数组中去
String[] list(FileNameFilter filter) 过滤作用

such as:

String s[]=file.list(new FilenameFilter() {                @Override                public boolean accept(File dir, String name) {                    // TODO Auto-generated method stub                    return name.endsWith(".java");                }            });
boolean mkdir() 创建file所指向的目录 中间的文件如果不存在 创建失败        boolean mkdirs() 创建所有的目录,包括父目录
    boolean createNewFile() 在已经存在的路径上创建一个不存在的文件 若:路径不存在或者该路径下文件已经存在 返回false 否则创建成功 返回true    boolean createTempFile(String prefix,                            String suffix,                            File dir) 在已经存在的路径dir上创建前缀未perfix后缀名suffix的文件,返回创建完的file对象    long length() 返回文件的大小     boolean delete()删除文件或者目录    boolean canWrite()  是否可写    boolean canRead()  是否可读    boolean canExecute() 是否可以执行

重要说明(补充)

最近写了一段代码 想要遍历磁盘里的所有文件,但是总是会报错,代码如下

package com.javase.io;import java.io.File;import java.util.ArrayList;import java.util.List;public class TestIterator {    public static void main(String[] args) {        // TODO Auto-generated method stub        IteratorUtil.IteratorDir(new File("E:\\"));    }}class IteratorUtil{    private static int level=0;// 缩进层数    //迭代方法    public static void IteratorDir(File file)    {        //file对应的不为null        if(file!=null)        {            //file对应的是文件或者是目录但是目录中子类数目为0--迭代的出口            if(file.isFile()||file.listFiles().length==0)            {                return;            }else            {                File[] files=file.listFiles();                files=sort(files);//排序                //遍历                for(File f:files)                {                    StringBuffer sb=new StringBuffer();                    if(f.isFile())                    {                        sb.append(getTab(level));                        sb.append(f.getName());                    }                    else                    {                        sb.append(getTab(level));                        sb.append(f.getName());                        sb.append(".*");                    }                    System.out.println(sb.toString());                    //进行迭代                    if(f.isDirectory())                    {                        level++;                        IteratorDir(f);                        level--;                    }                }            }        }    }    //为文件按先文件夹后文件的顺序排序    private static File[] sort(File[] files)    {        //存放文件的临时容器        List<File> flist=new ArrayList<File>();        //先添加目录        for(File f:files)        {            if(f.isDirectory())            {                flist.add(f);            }        }        //后添加文件        for(File f:files)        {            if(f.isFile())            {                flist.add(f);            }        }        //返回一个指定大小和制定类型的数组        return flist.toArray(new File[flist.size()]);    }    private static String getTab(int level)    {        StringBuffer sb=new StringBuffer();        for(int i=0;i<level;i++)        {            sb.append("\t");        }        return sb.toString();    }}

结果如下
总是会报空指针异常
这里写图片描述
**其实原因是这样的,我的E盘中有系统文件,系统文件不允许访问,所以代码中的file.listFiles().length==0有问题,我一开始以为file.listFiles()这个方法会有问题,但是事实上,这个方法没问题,有问题的是,file.listFile()返回的对象不允许访问,也就是说,length()不能使用。所以,我将file.listFiles().length()==0改为file.listFiles()==null就解决了问题。
那么就说明 如果文件是系统文件,listFiles方法返回的是null;没有null.length()这样的代码!!**

最后:注意系统文件当你在写操作文件的代码时

1 0
原创粉丝点击