文件操作


  • 写入文件、读取内容、删除文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) {

        // 写入文件
        try {
            // 创建文件
            File file = new File("test.txt");
            if (file.createNewFile())
                System.out.println("文件创建成功!");
            else
                System.out.println("出错了,该文件已经存在。");
            // 在当前目录下生产一个txt文件
            BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"));
            out.write("向文件写入内容");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取内容
        try {
            BufferedReader in = new BufferedReader(new FileReader("test.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }
            in.close();
        } catch (IOException e) {
        }

        // 删除文件
        try{
            File file = new File("test.txt");
            if(file.delete()){
                System.out.println(file.getName() + " 文件已被删除!");
            }else{
                System.out.println("文件删除失败!");
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }
}

  • 使用 BufferedWriter 类的 read 和 write 方法将文件内容复制到另一个文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        BufferedWriter out1 = new BufferedWriter(new FileWriter("srcfile.txt"));
        out1.write("string to be copied\n");
        out1.close();
        InputStream in = new FileInputStream(new File("srcfile.txt"));
        OutputStream out = new FileOutputStream(new File("destnfile.txt"));
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
        BufferedReader in1 = new BufferedReader(new FileReader("destnfile.txt"));
        String str;
        while ((str = in1.readLine()) != null) {
            System.out.println(str);
        }
        in1.close();
    }
}

  • 使用 filewriter 方法向文件中追加数据
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws Exception {
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter("filename.txt"));
            out.write("aString1\n");
            out.close();
            out = new BufferedWriter(new FileWriter("filename.txt", true));
            out.write("aString2");
            out.close();
            BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }
            in.close();
        } catch (IOException e) {
            System.out.println("exception occoured" + e);
        }
    }
}

  • 使用 File 类的 createTempFile(String prefix, String suffix); 方法在默认临时目录来创建临时文件,参数 prefix 为前缀,suffix 为后缀
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Demo {
    public static void main(String[] args) throws Exception {
        // 创建临时文件,可以使用 createTempFile(String prefix, String suffix, File directory) 中的
        // directory 参数来指定临时文件的目录
        File temp = File.createTempFile("tmp", ".txt");
        System.out.println("文件路径: " + temp.getAbsolutePath());
        // 终止后删除临时文件
        temp.deleteOnExit();
        BufferedWriter out = new BufferedWriter(new FileWriter(temp));
        out.write("aString");
        System.out.println("临时文件已创建:");
        out.close();
    }
}

  • 使用 File 类的 fileToChange.lastModified() 和 fileToChange setLastModified() 方法来修改文件最后的修改日期
import java.io.File;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Exception {
        File fileToChange = new File("test.txt");
        fileToChange.createNewFile();
        Date filetime = new Date(fileToChange.lastModified());
        System.out.println(filetime.toString());
        System.out.println(fileToChange.setLastModified(System.currentTimeMillis()));

        // 获取文件最后的修改时间
        File file = new File("test.txt");
        Long lastModified = file.lastModified();
        Date date = new Date(lastModified);
        System.out.println(date.toString());
    }
}

  • 使用 File 类的 file.exists() 和 file.length() 方法来获取文件大小,以字节计算(1KB=1024字节 )
  • 使用 File 类的 oldName.renameTo(newName) 方法来重命名文件
  • 设置文件只读
  • 在指定目录中创建文件
import java.io.File;
import java.io.IOException;

public class Demo {

    // 获取文件大小
    public static long getFileSize(String filename) {
        File file = new File(filename);
        // 检测文件是否存在
        if (!file.exists() || !file.isFile()) {
            System.out.println("文件不存在");
            return -1;
        }
        return file.length();
    }

    public static void main(String[] args) {

        // 获取文件大小
        long size = getFileSize("test.txt");
        System.out.println("文件大小为: " + size);

        // 文件重命名
        File oldName = new File("test.txt");
        File newName = new File("new.txt");
        if (oldName.renameTo(newName)) {
            System.out.println("已重命名");
        } else {
            System.out.println("Error");
        }

        // 设置文件只读
        File file = new File("new.txt");
        System.out.println(file.setReadOnly());
        System.out.println(file.canWrite());

        // 使用 File 类的 file.createTempFile() 方法在指定目录中创建文件
        File cfile = null;
        File dir = new File("D:\\eclipse-workspace\\hello");
        try{
            cfile = File.createTempFile("text", ".txt", dir);
        }catch(IOException e) {
        }
        System.out.println(cfile.getPath());
    }
}

目录操作


import java.io.File;
import java.io.FileFilter;
//import java.io.FilenameFilter;
import java.util.Date;

import org.apache.commons.io.FileUtils;

public class Demo {

    public static void main(String[] args) {
        recCreDir("D:\\a\\b\\c");
        delDir(new File("D:\\a"));
        empDir(new File("D:\\eclipse"));
        // 判断文件是否隐藏
        System.out.println(new File("D:\\test.txt").isHidden());
        // 获取目录大小,先再项目中导入commons-io-2.6.jar
        long size = FileUtils.sizeOfDirectory(new File("D:\\eclipse"));
        System.out.println("Size:" + size + "bytes");
        // 在指定目录中查找所有文件列表
        finFil(new File("D:\\eclipse"));
        // 获取文件的上级目录
        File file = new File("D:\\test.txt");
        String strParentDirectory = file.getParent();
        System.out.println("文件的上级目录:" + strParentDirectory);
        // 获取目录最后修改时间
        System.out.println("最后修改时间:" + new Date(file.lastModified()));
        // 打印目录结构
        // strDir(1, new File("D:\\eclipse\\java-oxygen\\eclipse"));
        // 遍历指定目录下的所有目录
        allDir(new File("D:\\eclipse\\java-oxygen\\eclipse"));
        allFil(new File("D:\\eclipse\\java-oxygen\\eclipse"));
        // 查看系统根目录
        rooDir();
        // 查看当前工作目录
        System.out.println("当前工作目录:" + System.getProperty("user.dir"));
        // 遍历目录
        traDir(new File("D:\\eclipse-workspace\\hello"));
        System.out.println("hello, world");
    }

    // 递归创建目录
    public static void recCreDir(String dir) {
        File file = new File(dir);
        // 使用 File 类的 mkdirs() 实现递归创建目录
        boolean result = file.mkdirs();
        System.out.println("递归创建目录:" + result);
    }

    // 删除目录
    public static boolean delDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = delDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        if (dir.delete()) {
            System.out.println("目录已被删除");
            return true;
        } else {
            System.out.println("目录删除失败");
            return false;
        }
    }

    // 判断目录是否为空
    public static void empDir(File dir) {
        if (dir.isDirectory()) {
            if (dir.list().length > 0) {
                System.out.println("目录不为空");
            } else {
                System.out.println("目录为空");
            }
        } else {
            System.out.println("这不是一个目录");
        }

    }

    // 在指定目录中查找文件
    public static void finFil(File dir) {

        // // 在 C 盘中查找以字母 'b' 开头的所有文件
        // FilenameFilter filter = new FilenameFilter() {
        // public boolean accept(File dir, String name) {
        // return name.startsWith("b");
        // }
        // };
        // String[] children = dir.list(filter);

        String[] children = dir.list();
        if (children == null) {
            System.out.println("该目录不存在");
        } else {
            for (int i = 0; i < children.length; i++) {
                String filename = children[i];
                System.out.println(filename);
            }
        }
    }

    // 打印目录结构
    public static void strDir(int indent, File file) {
        for (int i = 0; i < indent; i++)
            System.out.print('-');
        System.out.println(file.getName());
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                strDir(indent + 4, files[i]);
            }
        }
    }

    // 遍历指定目录下的所有目录
    public static void allDir(File dir) {
        File[] files = dir.listFiles();
        FileFilter fileFilter = new FileFilter() {
            public boolean accept(File file) {
                return file.isDirectory();
            }
        };
        files = dir.listFiles(fileFilter);
        System.out.println(files.length);
        if (files.length == 0) {
            System.out.println("目录不存在或它不是一个目录");
        } else {
            for (int i = 0; i < files.length; i++) {
                File filename = files[i];
                System.out.println(filename.toString());
            }
        }
    }

    // 遍历指定目录下的所有文件
    public static void allFil(File dir) {
        String[] children = dir.list();
        if (children == null) {
            System.out.println("目录不存在或它不是一个目录");
        } else {
            for (int i = 0; i < children.length; i++) {
                String filename = children[i];
                System.out.println(filename);
            }
        }
    }

    // 遍历系统根目录
    public static void rooDir() {
        File[] roots = File.listRoots();
        System.out.println("系统所有根目录:");
        for (int i = 0; i < roots.length; i++) {
            System.out.println(roots[i].toString());
        }
    }

    // 遍历目录
    public static void traDir(File dir) {
        System.out.println(dir);
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                traDir(new File(dir, children[i]));
            }
        }
    }
}