首页 > 代码库 > java文件操作

java文件操作

Java关于文件操作

最近工作中遇到的问题涉及到很多的文件操作,包括文件的读写,在当前目录,任意目录的文件创建,目录创建。涉及到文件的创建要求当父级目录不存在时创建父级目录。

  1. 创建目录

   有两个函数,mkdir(),mkdirs();经过测试,发现mkdir()只适用于创建父级目录存在的情况,当父级目录不存在的时候,无法创建文件夹。而mkdirs()当父级目录不存在的时候依次创建父级目录再创建文件夹。代码如下;

public boolean CreatDir(String dirpath){
    File dir = new File(dirpath);
    if (dir.exists()) {
        System.out.println("创建目录" + dirpath + "失败,目标目录已经存在");
        return false;
    }
    //添加分隔符,也就是斜杠
    if (!dirpath.endsWith(File.separator)) {
        dirpath = dirpath + File.separator;
    }
    //创建目录
    if (dir.mkdirs()) {
        System.out.println("创建目录" + dirpath + "成功!");
        return true;
    } else {
        System.out.println("创建目录" + dirpath + "失败!");
        return false;
    }
}

由于提供的dirpath很多情况下不知道父目录是否存在,个人比较喜欢使用mkdirs()来创文件夹。

 

  2. 创建单个文件

创建文件时先判断父级目录是否存在,不存在则创建父级目录再创建文件,代码如下;

public boolean CreateFile(String filepath){
    File file = new File(filepath);
    if(file.exists()){
        System.out.println("创建文件"+filepath+"失败"+", 文件已存在");
        return false;
    }
    if(filepath.endsWith(File.separator)){
        System.out.println("创建文件失败"+",创建目标是目录!");
        return false;
    }
    //检查父级目录是否存在,不存在就创建
    if(!file.getParentFile().exists()){
        System.out.println("目标文件的父级目录不存在,准备创建父级目录");
        if(!file.getParentFile().mkdirs()){
            return false;
        }
    }
    //创建文件
    try{
        if(file.createNewFile()){
            System.out.println("创建文件"+filepath+"成功");
            return true;
        } else {
            System.out.println("创建文件"+filepath+"失败");
            return false;
        }
    }catch (IOException e){
        e.printStackTrace();
        System.out.println("创建文件"+filepath+"失败"+e.getMessage());
        return false;
    }
}

 

  3.读文件

  • 文件的读操作,使用带缓冲的字节流,以字节的形式读取文件,并写到参数指定的输出流out,
  • 引用如下博客:http://www.cnblogs.com/coderworld/p/java-io-file.html#_label2
  • 参考博客:http://www.cnblogs.com/stevendes/p/5483884.html
  • 代码如下:按字符读文件,使用BufferedReader提高效率

public String ReadFileBychars(String filename){
        File file =  new File(filename);
        String content = "";
        //判断文件是否存在
        if(!file.exists()||!file.isFile()){
            return "";
        }
        FileReader fir = null;
        BufferedReader bir = null;
        try{
            fir = new FileReader(file);
            bir = new BufferedReader(fir);
            String temp = "";
            while((temp=bir.readLine())!=null){
                content = content + temp;
            }

        } catch (IOException e){
            e.printStackTrace();
        }finally {
            try{
                bir.close();
                fir.close();
            }catch (IOException e){
                e.printStackTrace();
            }

        }
        return content;
    }

  • 按字节读文件,每次读一个字节,将文件内容返回,代码如下:
  • 参考博客:http://www.cnblogs.com/stevendes/p/5483884.html

public String ReadFileByBytes(String filename){
        File file = new File(filename);
        String content = "";
        if(!file.exists()||!file.isFile()){
            return new String();
        }
        FileInputStream fis = null;
        try{
            fis= new FileInputStream(file);
            int size = fis.available();
            for(int i=0; i<size; i++){
                content = content + (char)fis.read();
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return content;

    }

  4.写文件

  • 文件的写操作,使用带缓冲的字节流,从参数指定的输入流in读取,并以字节形式写到目标文件。
  • 引用如下博客:http://www.cnblogs.com/coderworld/p/java-io-file.html#_label2
  • 参考博客:http://www.cnblogs.com/stevendes/p/5483884.html
  • 由于工作需要,在写文件时,需要传入内容写入文件。代码如下:

public boolean writeFileByFileWriter(String filePath, String content)  {
        File file = new File(filePath);
        synchronized (file) {
            FileWriter fw = null;
            try {
                fw = new FileWriter(filePath);
                fw.write(content);
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } finally {
                try{
                    fw.close();
                }catch (IOException e){
                    e.printStackTrace();
                }

            }
        }

}

 

  

 

java文件操作