zoukankan      html  css  js  c++  java
  • File对象的基本操作学习

    对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();
        }
    
    }
    
    
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    关于学习
    两个有序链表序列的合并
    谜题 UVA227
    周期串(Periodic Strings, UVa455)
    数数字(Digit Counting,ACM/ICPC Danang 2007,UVa1225)
    得分(Score, ACM/ICPC Seoul 2005,UVa 1585)
    201505061055_《Javascript编码规范笔记》
    201505031734_《JavaScript中的函数》
    201505030956_《Javascript变量整理》
    201505022013_《js好的坏的》
  • 原文地址:https://www.cnblogs.com/penggy/p/4786489.html
Copyright © 2011-2022 走看看