File对象的基本操作学习

来源:互联网 发布:淘宝客服简历工作描述 编辑:程序博客网 时间:2024/05/16 15:42

对File的一些基础操作

在学习的过程当中主要看了java的api,同时参考apache的一些file工具类,io工具类,感觉收获不小

  1. 新增文件
  2. 新增文件目录,若目录不存在,自动进行创建;File对象的createFile方法不支持目录不存在的创建
    • 支持多级空目录的创建
  3. 删除文件目录,若目录里面存在文件,则进行递归删除
    • 支持多级目录的删除,支持非空目录删除
  4. 移动文件(目录)到指定的位置
  5. 复制文件(目录)到指定的位置,在复制含有文件的目录的时候未完成
    • 目标目录为空时,自动创建
    • 支持复制文件夹及文件夹下的文件
  6. 显示文件内容

需要注意事项

  • createNewFile不支持目录不存在的文件创建方法
  • mkdirs支持多目录不存在的递归创建
  • rename只支持同级目录下的重命名,不支持不同目录的重命名
  • intputStream入参对象不能为目录
package com.pgy.io;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.Reader;import java.io.StringWriter;import java.io.Writer;public class FileApi {    /** 文件读取结束标志  */    private static final int EOF                 = -1;    /** 默认读取空间大小 */    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;    public static void main(String[] args) {        String deleteFilePath = "/Users/admin/logs/aa/";        String createFilePath = "/Users/admin/logs/aa/bb/cc/test.txt";        String targetFilePath = "/Users/admin/logs/aa/bb/cc/";        String sourceDirPath = "/Users/admin/logs/aa/bb/dd/";        File createFile = new File(createFilePath);        File DeleteFile = new File(deleteFilePath);        File targetFile = new File(targetFilePath);        File sourceFile = new File(sourceDirPath);        //        createFile(createFile);        //        //        copyFile(targetFile, sourceFile);        //        //        mvFile(createFile, targetFile);        //        deleteFile(DeleteFile);        //        System.out.println(getFileContent(targetFile, "utf-8"));    }    /**     * 获取file当中的内容,为string类型     * @param file file对象     * @param charset 字符串编码     * @return     */    public static final String getFileContent(File file, String charset) {        FileInputStream fis = null;        try {            fis = new FileInputStream(file);            Reader reader = new InputStreamReader(fis, charset);            StringWriter sw = new StringWriter();            parseReaderToWrite(reader, sw);            return sw.toString();        } catch (Exception e) {        }        return null;    }    /**     * File.rename方法只支持同级目录下的重命名     * 先拷贝文件,然后再删除源文件     * @param sourceFile     * @param targetFile     */    public static final void mvFile(File sourceFile, File targetFile) {        copyFile(sourceFile, targetFile);        deleteFile(sourceFile);    }    /**     * 用FileInputStream与FileOutputStream方式进行对文件的读写操作,完成copy     * 也可以通过FileReader与FileWirte进行实现     * @param sourceFile     * @param targetFile     */    public static final void copyFile(File sourceFile, File targetFile) {        FileInputStream fis = null;        FileOutputStream fos = null;        if (!targetFile.exists()) {            createFile(targetFile);        }        try {            File[] fileList = sourceFile.listFiles();            for (File file : fileList) {                File newTargetFile = null;                if (file.isFile()) {                    fis = new FileInputStream(file);                    newTargetFile = new File(targetFile, file.getName());                    fos = new FileOutputStream(newTargetFile);                    parseInputStreamToOutputStream(fis, fos);                    fis.close();                    fos.close();                }                if (file.isDirectory()) {                    File oldFile = new File(sourceFile, file.getName());                    File newFile = new File(targetFile, file.getName());                    copyFile(oldFile, newFile);                }            }        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 将inputStream转换为OutputStream     * @param input     * @param output     * @return     * @throws IOException     */    public static long parseInputStreamToOutputStream(InputStream input, OutputStream output)                                                                                             throws IOException {        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];        long count = 0;        int n = 0;        while (EOF != (n = input.read(buffer))) {            output.write(buffer, 0, n);            count += n;        }        return count;    }    /**     * 将reader转换为write     * @param input     * @param output     * @return     * @throws IOException     */    public static long parseReaderToWrite(Reader input, Writer output) throws IOException {        char[] buffer = new char[DEFAULT_BUFFER_SIZE];        long count = 0;        int n = 0;        while (EOF != (n = input.read(buffer))) {            output.write(buffer, 0, n);            count += n;        }        return count;    }    /**     * 删除文件     * File.delete不支持目录不为空的删除     * 判断file对象列表当中的目录进行循环删除     * @param file     */    public static final void deleteFile(File file) {        if (file.exists()) {            file.delete();        }        if (file.isDirectory()) {            File[] fileList = file.listFiles();            for (File fileChild : fileList) {                deleteFile(fileChild);            }        }    }    /**     * File对象createFile方法,不支持目录不存在的文件创建     * 对其parent进行判断,若不存在,则对目录先进行递归创建     *      * @param filePath     */    public static final void createFile(File file) {        File fileDir = file.getParentFile();        if (!fileDir.exists()) {            fileDir.mkdirs();        }        if (!file.getName().contains(".") && !file.exists()) {            file.mkdir();        }        try {            file.createNewFile();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 合并字符串为目录     * 由于不同的操作系统当中对于目录的层级分割是不一样的,例如:windows:\  其它的:/     * 在拼接目录的时候我们不能单纯的使用/或\来进行拼接     * @param parent     * @param child     * @return     */    public static final File spliceFile(String parent, String child) {        return new File(parent, child);    }    public static void fileInfoPrint(File file) throws IOException {        System.out.println(file.canRead());        System.out.println(file.canWrite());        System.out.println(file.canExecute());        System.out.println(file.getAbsolutePath());        System.out.println(file.getAbsoluteFile());        System.out.println(file.getCanonicalPath());        System.out.println(file.getUsableSpace());        System.out.println(file.getTotalSpace());        System.out.println(file.getName());        System.out.println(file.getParent());        System.out.println(file.getParentFile());        System.out.println(file.getPath());        System.out.println(file.isDirectory());        System.out.println(file.isFile());        System.out.println(file.isHidden());        System.out.println(file.isAbsolute());        System.out.println(file.length());        System.out.println(file.exists());        System.out.println(file.hashCode());        System.out.println(file.toString());        System.out.println(file.toPath());        System.out.println(file.toURI());        file.setExecutable(true, false);        file.setReadable(true);        file.setWritable(true);        file.setReadOnly();    }}
0 0