zoukankan      html  css  js  c++  java
  • Java I/O 之文件操作

    Java I/O

    Java 附带了许多方便的I/O 类来支持通过字节流和文件系统的输入和输出。这是 Java I/O 示例的列表,包括文件、临时文件和目录操作、编码、序列化以及使用 zip 或 Gzip 压缩。

    文件

    文件示例列表,显示使用 Java I/O 创建、读取、写入、修改文件和获取文件信息

    • 创建文件
    • 构建文件路径
    • 设置文件权限
    • 使用 BufferedInputStream 读取文件
    • 使用 BufferedReader 读取文件
    • 使用 FileOutputStream 写入文件
    • 使用 BufferedWriter 写入文件
    • 将内容附加到文件
    • 删除文件
    • 仅删除具有特定扩展名的文件
    • 仅查找具有特定扩展名的文件
    • 重命名文件
    • 复制文件
    • 将文件移动到另一个目录
    • 获取文件创建日期
    • 获取文件上次修改日期
    • 更改文件上次修改日期
    • 使文件只读
    • 获取文件大小
    • 获取文件的文件路径
    • 获取文件的总行数
    • 检查文件是否存在
    • 检查文件是否隐藏
    • 从文件中读取 UTF-8 编码的数据
    • 将 UTF-8 编码的数据写入文件
    • 将文件内容分配给变量
    • 生成文件校验和值
    • 将 File 转换为字节数组
    • 将字节数组转换为文件
    • 将字符串转换为输入流
    • 将输入流转换为字符串
    • 将文件转换为十六进制
    • 获取分区或卷中的总可用磁盘空间

    在Java中创建并写入文件

    使用 Files.newBufferedWriter

        @Test
        public void testCreateFile(){
            String content = "啊啊啊~";
    
            String fileName = "C:\\rzk\\newFile.txt";
            Path path = Paths.get(fileName);
    
            try {
                Files.write(
                        //获取地址
                        path,
                        content.getBytes(StandardCharsets.UTF_8));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    Paths.get(文件地址)如果文件不存在,会自动创建文件(前提地址要正确)
    Paths.get的源码

    在已写入的文件后尾追加信息

                Files.write(
                        //获取地址
                        path,
                        content.getBytes(StandardCharsets.UTF_8),
                        //在文件后尾追加
                        StandardOpenOption.APPEND);
    

    啊啊啊啊啊啊啊啊~

    write可使用list

            String fileName = "C:\\rzk\\newFile.txt";
            Path path = Paths.get(fileName);
            List<String> list = Arrays.asList("1","2","3","4");
            try {
                Files.write(
                        path, list,
                        StandardCharsets.UTF_8);
            } catch (IOException e) {
                e.printStackTrace();
            }
    

    删除文件

    使用NIO删除文件delete

        @Test
        public void writeTest(){
            String fileName = "C:\\rzk\\newFile.txt";
            String content = "我是世界主宰!!!";
            try {
                Path paths = Paths.get(fileName);
                Files.write(paths, content.getBytes(StandardCharsets.UTF_8));
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void deleteTest(){
            String fileName = "C:\\rzk\\newFile.txt";
            Path path = Paths.get(fileName);
            try {
                Files.delete(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    但是如果文件不存在会抛NoSuchFileException异常 java.nio.file.NoSuchFileException: C:\rzk\newFile.txt

    使用NIO删除文件deleteIfExists

    deleteIfExists有返回boolean类型,不会像delete文件不存在会报空异常

        @Test
        public void deleteTest(){
            String fileName = "C:\\rzk\\newFile.txt";
            Path path = Paths.get(fileName);
            try {
                boolean exists = Files.deleteIfExists(path);
                if (exists==true){
                    System.out.println("删除成功");
                }else {
                    System.out.println("删除失败或者文件不存在");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    使用IO删除文件

        @Test
        public void delete1Test(){
            String fileName = "C:\\rzk\\newFile.txt";
            File file = new File(fileName);
            if (file.delete()){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失败");
            }
        }
    

    复制移动

    复制

    使用nio

    ···
    @Test
    public void copyTest(){
    String fileName = "C:\rzk\newFile.txt";
    String copyToFile = "C:\rzk\copyToFile.txt";

        Path path = Paths.get(fileName);
        Path path1 = Paths.get(copyToFile);
    
    
        try {
            Files.copy(path,path1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    ···

    使用原生io流

    ···
    @Test
    public void copyTest1() throws IOException {
    InputStream inputStream = null;
    OutputStream outputStream = null;
    String fileName = "C:\rzk\newFile.txt";
    String copyToFile = "C:\rzk\copyToFile.txt";

        File fromFile = new File(fileName);
        File toFile = new File(copyToFile);
    
        inputStream = new FileInputStream(fromFile);
        outputStream = new FileOutputStream(toFile);
    
    
        byte[] bytes = new byte[1024];
    
        int length;
        while ((length = inputStream.read(bytes)) > 0 ){
            outputStream.write(bytes,0,length);
        }
    }
    

    ···

    移动

    ···java
    @Test
    public void moveTest(){
    String fileName = "C:\rzk\newFile.txt";
    String copyToFile = "C:\rzk\Users.txt";

        Path path = Paths.get(fileName);
        Path path1 = Paths.get(copyToFile);
    
    
        try {
            Files.move(path,path1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    ···

  • 相关阅读:
    VC.【转】采用_beginthread/_beginthreadex函数创建多线程
    Qt532.【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
    Qt532界面.ZC测试
    Qt532.【转】Qt创建鼠标右键菜单
    VC.【转】窗口置于前台并激活的方法
    VS2010.STL::list的一个bug
    STL_map.VC6简单使用例子
    LeetCode题解-----Maximum Gap
    CEPH块设备创建及快照
    Ubuntu 14.04 部署 CEPH集群
  • 原文地址:https://www.cnblogs.com/rzkwz/p/15730976.html
Copyright © 2011-2022 走看看