我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java文件基本操作总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java文件基本操作总结

File文件类

  • java.io.File是文件和目录的重要类(JDK6及以前是唯一)
  • 目录也使用File类进行表示
  • File类与操作系统无关,但会受到操作系统的权限限制
  • 常用方法createNewFile , delete , exists , getAbsolutePath , getName , getParent , getPathisDirectory , isFile , length , listFiles , mkdir , mkdirs
  • File不涉及到具体的文件内容、只会涉及属性

public static void main(String[] args) {
    // 创建目录
    File directory = new File("D:/temp");
    boolean directoryDoesNotExists = ! directory.exists();
    if (directoryDoesNotExists) {
        // mkdir是创建单级目录
        // mkdirs是连续创建多级目录
        directory.mkdirs();

    }
    // 创建文件
    File file = new File("D:/temp/test.txt");
    boolean fileDoesNotExsits = ! file.exists();
    if (fileDoesNotExsits) {
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 遍历directory下的所有文件消息
    File[] files = directory.listFiles();
    for (File file1 : files) {
        System.out.println(file1.getPath());
    }

}

运行结果:

D:\temp\test.txt

Java NIO

  • Java 7提出的NIO包,提出新的文件系统类
  • Path , Files , DirectoryStream , FileVisitor , FileSystem
  • 是对java.io.File的有益补充
  • 文件复制和移动
  • 文件相对路径
  • 递归遍历目录
  • 递归删除目录

Path类


public static void main(String[] args) {
    // Path和java.io.File基本类似
    Path path = FileSystems.getDefault().getPath("D:/temp", "abc.txt");
    // D:/ 返回1 D:/temp 返回2
    System.out.println(path.getNameCount());

    // 用File的toPath()方法获取Path对象
    File file = new File("D:/temp/abc.txt");
    Path path1 = file.toPath();
    System.out.println(path.compareTo(path1)); // 结果为0 说明两个path相等
    // 获取Path方法三
    Path path3 = Paths.get("D:/temp", "abc.txt");
    // 判断文件是否可读
    System.out.println("文件是否可以读取: " + Files.isReadable(path));
}

Files类


public static void main(String[] args) {
    // 移动文件
    moveFile();
    // 访问文件属性
    fileAttributes();
    // 创建目录
    createDirectory();
}

private static void createDirectory() {
    Path path = Paths.get("D:/temp/test");
    try {
        // 创建文件夹
        if (Files.notExists(path)) {
            Files.createDirectory(path);
        } else {
            System.out.println("文件夹创建失败");
        }
        Path path2 = path.resolve("a.java");
        Path path3 = path.resolve("b.java");
        Path path4 = path.resolve("c.txt");
        Path path5 = path.resolve("d.jpg");
        Files.createFile(path2);
        Files.createFile(path3);
        Files.createFile(path4);
        Files.createFile(path5);

        // 不带条件的遍历输出
        DirectoryStream<Path> listDirectory = Files.newDirectoryStream(path);
        for (Path path1 : listDirectory) {
            System.out.println(path1.getFileName());
        }
        // 创建一个带有过滤器,过滤文件名以java txt结尾的文件
        DirectoryStream<Path> pathsFilter = Files.newDirectoryStream(path, "*.{java,txt}");
        for (Path item : pathsFilter) {
            System.out.println(item.getFileName());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@SuppressWarnings("all")
private static void fileAttributes() {
    Path path = Paths.get("D:/temp");
    // 判断是否是目录
    System.out.println(Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS));
    try {
        // 获取文件的基础属性
        BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class);
        // 判断是否是目录
        System.out.println(attributes.isDirectory());
        // 获取文件最后修改时间
        System.out.println(new Date(attributes.lastModifiedTime().toMillis()).toLocaleString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static void moveFile() {
    Path from = Paths.get("D:/temp", "text.txt");
    // 将文件移动到D:/temp/test/text.txt, 如果目标文件以存在则替换
    Path to = from.getParent().resolve("test/text.txt");
    try {
        // 文件大小bytes
        System.out.println(Files.size(from));
        // 调用文件移动方法,如果目标文件已存在则替换
        Files.move(from, to, StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

递归遍历查找指定文件


public class Demo2 {
    public static void main(String[] args) {
        // 查找以.jpg结尾的
        String ext = "*.jpg";
        Path fileTree = Paths.get("D:/temp/");
        Search search = new Search(ext);
        EnumSet<FileVisitOption> options = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        try {
            Files.walkFileTree(fileTree, options, Integer.MAX_VALUE, search);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
class Search implements FileVisitor {
    private PathMatcher matcher;
    public Search(String ext) {
        this.matcher = FileSystems.getDefault().getPathMatcher("glob:" + ext);
    }

    public void judgeFile(Path file) throws IOException {
        Path name = file.getFileName();
        if (name != null && matcher.matches(name)) {
            // 文件名匹配
            System.out.println("匹配的文件名: " + name);
        }
    }
    // 访问目录前调用
    @Override
    public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs) throws IOException {
        return FileVisitResult.CONTINUE;
    }
    // 访问文件时调用
    @Override
    public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) throws IOException {
        judgeFile((Path) file);
        return FileVisitResult.CONTINUE;
    }
    // 访问文件失败后调用
    @Override
    public FileVisitResult visitFileFailed(Object file, IOException exc) throws IOException {
        return FileVisitResult.CONTINUE;
    }
    // 访问一个目录后调用
    @Override
    public FileVisitResult postVisitDirectory(Object dir, IOException exc) throws IOException {
        System.out.println("postVisit: " + (Path) dir);
        return FileVisitResult.CONTINUE;
    }
}

运行结果:

匹配的文件名: d.jpg
postVisit: D:\temp\test
postVisit: D:\temp

Java的IO包

  • Java读写文件,只能以数据流的形式进行读写
  • java.io包中
  • 节点类:直接对文件进行读写
  • 包装类:
  • 1、转换类:字节 / 字符 / 数据类型的转化类 。
  • 2、装饰类:装饰节点类。

节点类

  • 直接操作文件类
  • InputStream,OutStream(字节)
  • FileInputStream , FileOutputStream
  • Reader , Writer(字符)
  • FileReader , FileWriter

转换类

  • 从字符到字节之间的转化
  • InputStreamReader: 文件读取时字节,转化为Java能理解的字符
  • OutputStreamWriter: Java将字符转化为字节输入到文件中

装饰类

  • DataInputStream , DataOutputStream :封装数据流
  • BufferedInputStream ,BufferOutputStream:缓存字节流
  • BufferedReader , BufferedWriter:缓存字符流

文本文件的读写

写操作


public static void main(String[] args) {
    writeFile();
}

public static void writeFile(){
    try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/temp/demo3.txt")))) {
        bw.write("hello world");
        bw.newLine();
        bw.write("Java Home");
        bw.newLine();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Demo3.txt文件内容

hello world
Java Home

读操作


public static void main(String[] args) {
    readerFile();
}

private static void readerFile() {
    String line = "";
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/temp/demo3.txt")))) {
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

运行结果:

hello world
Java Home

二进制文件读写java


public static void main(String[] args) {
    writeFile();
}

private static void writeFile() {
    try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("D:/temp/test.dat")))) {
        dos.writeUTF("hello");
        dos.writeUTF("hello world is test bytes");
        dos.writeInt(20);
        dos.writeUTF("world");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

文件内容

hellohello world is test bytes world

读操作


public static void main(String[] args) {
   readFile();
}

private static void readFile() {
    try (DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("D:/temp/test.dat")))) {
        System.out.println(in.readUTF() + in.readUTF() + in.readInt() + in.readUTF());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

运行结果:

hellohello world is test bytes20world

ZIP文件的读写

  • zip文件操作类:java.util.zip包中
  • java.io.InputStream , java.io.OutputStream的子类
  • ZipInputStream , ZipOutputStream压缩文件输入 / 输出流
  • ZipEntry压缩项

多个文件压缩


// 多个文件压缩
public static void main(String[] args) {
    zipFile();
}
public static void zipFile() {
    File file = new File("D:/temp");
    File zipFile = new File("D:/temp.zip");
    FileInputStream input = null;
    try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
        // 添加注释
        zos.setComment(new String("多个个文件压缩".getBytes(),"UTF-8"));

        // 压缩过程
        int temp = 0;
        // 判断是否为文件夹
        if (file.isDirectory()) {
            File[] listFile = file.listFiles();
            for (int i = 0; i < listFile.length; i++) {
                    // 定义文件的输出流
                    input = new FileInputStream(listFile[i]);
                    // 设置Entry对象
                    zos.putNextEntry(new ZipEntry(file.getName() +
                            File.separator + listFile[i].getName() ));
                    System.out.println("正在压缩: " + listFile[i].getName());
                    // 读取内容
                    while ((temp = input.read()) != -1) {
                        // 压缩输出
                        zos.write(temp);
                    }
                    // 关闭输入流
                    input.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

注意:压缩的文件夹不能有子目录,否则会报FileNotFoundException: D:\temp\test (拒绝访问。),这是由于input = new FileInputStream(listFile[i]);读取的文件类型是文件夹导致的

多个文件解压缩


// 多个文件解压缩
public static void main(String[] args) throws Exception{
    // 待解压的zip文件,需要在zip文件上构建输入流,读取数据到Java中
    File file = new File("C:\\Users\\Wong\\Desktop\\test.zip");

    // 输出文件的时候要有文件夹的操作
    File outFile = null;
    // 实例化ZipEntry对象
    ZipFile zipFile = new ZipFile(file);

    // 定义解压的文件名
    OutputStream out = null;
    // 定义输入流,读取每个Entry
    InputStream input = null;
    // 每一个压缩Entry
    ZipEntry entry = null;
    
    // 定义压缩输入流,实例化ZipInputStream
    try (ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file))) {
        // 遍历压缩包中的文件
        while ((entry = zipInput.getNextEntry()) != null) {
            System.out.println("解压缩 " + entry.getName().replaceAll("/", "") + " 文件");
            // 定义输出的文件路径
            outFile = new File("D:/" + entry.getName());
            
            boolean outputDirectoryNotExsits = !outFile.getParentFile().exists();
            // 当输出文件夹不存在时
            if (outputDirectoryNotExsits) {
                // 创建输出文件夹
                outFile.getParentFile().mkdirs();
            }
            
            boolean outFileNotExists = !outFile.exists();
            // 当输出文件不存在时
            if (outFileNotExists) {
                if (entry.isDirectory()) {
                    outFile.mkdirs();
                } else {
                    outFile.createNewFile();
                }
            }

            boolean entryNotDirctory = !entry.isDirectory();
            if (entryNotDirctory) {
                input = zipFile.getInputStream(entry);
                out = new FileOutputStream(outFile);
                int temp = 0;
                while ((temp = input.read()) != -1) {
                    out.write(temp);
                }
                input.close();
                out.close();
                System.out.println("解压缩成功");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

到此这篇关于Java文件基本操作总结的文章就介绍到这了,更多相关Java文件基本操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java文件基本操作总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python文件与文件夹常见基本操作总结

本文实例讲述了Python文件与文件夹常见基本操作。分享给大家供大家参考,具体如下: 1、判断文件(夹)是否存在。os.path.exists(pathname)2、判断路径名是否为文件。os.path.isfile(pathname)3、
2022-06-04

java IO 文件操作方法总结

java IO 文件操作方法总结对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成。程序将数据给外部设备,通过输出流完成。文件Io的操作//获取文件File file=new File("d:/a.txt
2023-05-31

Java日期相关API的基本操作总结

大概总结一下日期相关API操作原因是对于日期的操作我们开发中还是很常见的,包括在数据库中保存日期,以及之前String类中对字符串的一些处理开发中都很常见,希望对大家有所帮助
2022-11-21

python csv一些基本操作总结

一、读取数据 csv.reader csv.reader传入的可以是列表或者文件对象,返回的是一个可迭代的对象,需要使用for循环遍历path = "C:\\Users\\A539\\Desktop\\1.csv" with open(pa
2022-06-02

总结ElasticSearch基本操作!非常详细!

es下载地址IK分词器下载地址
2023-05-14

文件的基本操作

假设文件名为:loga.txt        内容为:你说什么呢  1 -- open() 打开文件  参数1: 要打开的文件路径 + 文件名  参数2: 打开方式    r   ---- 只读模式,文本必须存在    r+ ---- 读写
2023-01-30

基本的文件操作

什么是文件?文件是操作系统为用户或应用程序提供的读写硬盘的虚拟单位,有了文件我们可以读取数据,没有文件的话应该去在硬盘上扣动机械手臂然后寻找数据如何使用文件1,打开文件2,读写数据3,保存4,关闭文件使用python控制文件read一次性读
2023-01-31

Python文件(夹)基本操作

1、判断文件(夹)是否存在。os.path.exists(pathname)2、判断路径名是否为文件。os.path.isfile(pathname)3、判断路径名是否为目录。os.path.isdir(pathname)4、创建文件。os
2023-01-31

Java如何对文件进行基本操作

这篇文章给大家分享的是有关Java如何对文件进行基本操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。File文件类java.io.File是文件和目录的重要类(JDK6及以前是唯一)目录也使用File类进行表示
2023-06-20

Python3 文件(夹)基本操作

相关模块osos.pathshutilpathlib(New in version 3.4)基本操作判断文件(夹)是否存在。os.path.exists(pathname)# newpathlib.Path(pathname).exists
2023-01-31

python3 csv文件基本操作

csv(Comma-Separated Values),也叫逗号分割值,如果你安装了excel,默认会用excel打开csv文件。废话少说直接贴代码:import csv# 打开文件,用with打开可以不用去特意关闭file了,python
2023-01-31

PHP操作文件的命令总结

本篇内容主要讲解“PHP操作文件的命令总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP操作文件的命令总结”吧!PHP 包含文件PHP include 和 require 语句在 PHP
2023-06-04

数据库基本操作语法归纳总结

关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构。主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键。主键有两个特点:非空和不能重复。外键:在关系型数据库中,外键就是用来表达表与表之间的关系、联系,
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录