Java文件IO

目录

一. 文件路径

1.1 绝对路径

1.2 相对路径

二 . 文件操作

 2.1 File类

 2.2  字符流 Reader/Writer

 2.3  字节流 InputStream/OutputStream

三. 实现一个文件的搜索功能


一. 文件路径

1.1 绝对路径

从盘符开始,一层一层往下找,得到的路径是绝对路径;

1.2 相对路径

 从给定的某个目录触发,一层一层往下找,得到的路径是相对路径;


假设给定一个这样的路径:

从给定个目录开始找:

 假设我们要去找 src 这个文件夹,就可以表示成这样:

./20221030/src
../表示返回上一层

二 . 文件操作

因为文件是存储在硬盘上的,直接通过代码去操作硬盘,不太方便,所以我们一般在内存里进行操作,我们在内存中创建一个对应的对象,通过操作这个对象,就可以间接的影响到硬盘里的文件情况了,Java为我们提供File这个类,来方便我们对文件的操作;

 2.1 File类

java给我们提供了文件操作的许多API,里面的很多方法都可以帮助我们去解决很多问题:


 还是拿这个路径来说,绝对路径表示:

public class IO_Demo1 {
    public static void main(String[] args) {
        //绝对路径表示
        File file = new File("D:/Demo221230");
        //获取文件名
        System.out.println(file.getName());
        //获取父目录文件路径
        System.out.println(file.getParent());
        //获取文件的路径
        System.out.println(file.getPath());
        //获取文件的绝对路径
        System.out.println(file.getAbsolutePath());
    }

}

 运行结果:


 相对路径表示:

public class IO_Demo1 {
    public static void main(String[] args) {
        //相对路径表示
        File file = new File("./Demo221230");
        //获取文件名
        System.out.println(file.getName());
        //获取父目录文件路径
        System.out.println(file.getParent());
        //获取文件的路径
        System.out.println(file.getPath());
        //获取文件的绝对路径
        System.out.println(file.getAbsolutePath());
    }

}

运行结果:


创建文件

public class IO_Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("Demo.txt");
        System.out.println(file.exists());
        System.out.println(file.isFile());

        //创建文件
        file.createNewFile();

        System.out.println(file.exists());
        System.out.println(file.isFile());
    }
}

在File的构造方法里写了一个“Demo.txt”文件,但是这个文件并不存在,通过createNewFile()方法可以创建一个文件,这个文件的存放位置在项目的所属的根目录下;


 2.2  字符流 Reader/Writer

 该流用于从文件读取数据,它的对象可以用关键字 new 来创建:

public class IO_Demo3 {
    public static void main(String[] args) throws IOException {
        // 1.写法一,需要手动去close
        //打开文件
        //InputStream inputStream =new FileInputStream("d:/test.txt");

        //关闭文件
        //inputStream.close();


        //2. 写法二,try操作会在代码块执行结束后,自动执行close操作
        try (InputStream inputStream =new FileInputStream("d:/test.txt");){
            //读文件
            while (true){
                int n = inputStream.read();
                //强转成字符
                char c =(char)n;
                if(n == -1){
                    break;
                }
                System.out.println(c);
            }
        }
    }
}

 2.3  字节流 InputStream/OutputStream

该类用来创建一个文件并向文件中写数据:

public class IO_Demo4 {
    public static void main(String[] args) throws IOException {
        try (OutputStream outputStream = new FileOutputStream("d:/test.txt")){
            //数字代表对于的字符
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);
            outputStream.write(100);
        }
    }
}

 这样就写入数据了


三. 实现一个文件的搜索功能

package 文件IO;

import java.io.*;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Snk
 * Date: 2023-04-07
 * Time: 22:02
 */
public class IO_Demo5 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scan = new Scanner(System.in);
        // 1.让用户输入一个搜索的根目录
        System.out.println("请输入一个要搜索的根目录: ");
        File root = new File(scan.next());
        //判断是否是根目录
        if (!root.isDirectory()) {
            System.out.println("输入有误,输入的目录不存在!");
            return;
        }

        // 2.让用户输入一个要查询的词
        System.out.println("请输入要搜素的词: ");
        String word = scan.next();

        // 3.使用递归对文件或者目录进行遍历
        traverse(root, word);
    }

    private static void traverse(File root, String word) throws FileNotFoundException {
        //列出当前 root 中的内容,如果没有,直接结束程序
        File[] files = root.listFiles();
        if (files == null) {
            return;
        }
        //如果目录有内容,就进行递归
        for (File x : files) {
            //如果是普通文件
            if (x.isFile()) {
                //打开文件,读取内容,看看word是否包含在文件里
                String content = readFile(x);
                if (content.contains(word)) {
                    System.out.println(x.getAbsolutePath() + "包含要查找的word");
                }
            }
            //如果是目录
            else if (x.isDirectory()) {
                //进行递归
                traverse(x, word);
            } else {
                continue;
            }
        }

    }

    private static String readFile(File x) throws FileNotFoundException {
        //读取内容
        StringBuilder stringBuilder = new StringBuilder();
        try (Reader reader = new FileReader(x)) {
            //一次读取一个字符,把读到的结果拼装到 StringBuilder 里面,统一转成String
            while (true) {
                int c = reader.read();
                if (c == -1) {
                    break;
                }
                stringBuilder.append((char) c);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nvm管理node版本粗及

步骤一:清理本地node cmd ——> where node ——> 删除对应文件夹下所有node.exe的父文件夹控制面板 ——> 卸载node步骤二:安装nvm Tags coreybutler/nvm-windows GitHub 下载解压后运行安装exe文件,安装完成后重新cmd打开命令…

Hive3.1.3安装及部署

目录 1 下载地址 2 安装部署 2.1 安装Hive 2.2 启动并使用Hive 2.3 MySQL安装 2.3.1 安装MySQL 2.3.2 配置MySQL 2.3.3 卸载MySQL说明 2.4 配置Hive元数据存储到MySQL 2.4.1 配置元数据到MySQL 2.4.2 验证元数据是否配置成功 2.4.3 查看MySQL中的元数据 2.5 Hive服…

中金支付经历了4个月完成主要出资人前置审批

2023年4月6日,中国人民银行公示了关于中金支付有限公司的《中国人民银行准予行政许可决定书》(银许准予决字〔2023〕第41号),同意中金支付有限公司主要出资人由中金金融认证中心有限公司变更为广州广电运通金融电子股份有限公司&a…

Nacos安全性探究

Nacos怎么做安全校验的? 以下使用nacos2.x 如上图所示, 可以直接访问Nacos的接口来获取用户列表。这说明Nacos的接口被爆露,任何情况下都可以访问,因此安全性得不到保障。 Nacos 使用 spring security 作为安全框架。spring sec…

【Mybatis】1—前言日志框架

⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…

RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)

目录 RBFNN训练结果 UKF估计SOC 文章的结尾红色部分有彩蛋 RBFNN训练结果 这篇文章主要介绍如何使用RBF神经网络训练出的参数并结合UKF算法完成锂离子电池SOC的估计,有关RBF参数训练过程的代码分析放在2天后的下一篇文章,这里只给出训练完成后的结果…

关于async/await、promise和setTimeout执行顺序

关于async/await、promise和setTimeout执行顺序 async function async1() {console.log(async1 start);await async2();console.log(asnyc1 end); } async function async2() {console.log(async2); } console.log(script start); setTimeout(() > {console.log(setTimeOut…

springboot(01)项目搭建与启动

01,项目搭建与启动 一,项目搭建 有多种方式可以搭建Spring Boot项目,包括: 使用Spring Boot CLI命令行工具使用Spring Initializr网站或IDE插件生成项目模板使用Maven或Gradle手动配置项目 每种方式都有其优缺点,具…

Android IPC Binder机制学习(一)

一、多进程系统设计及意义Android系统分为5层,不过Android一般岗位只关注上三层就够用了即:应用层、framework层、native层。Android中的应用层和系统服务层不在同一个进程,系统服务在单独的进程中。Android中不同的应用属于不同的进程中Andr…

ChatGPT遭禁用、抵制后又停止Plus付费发生了?

ChatGPT相关信息 2023年2月27日消息,Snapchat 正在推出一个基于 OpenAI 的 ChatGPT 最新版本的聊天机器人。 这款名为“My AI”的机器人将被固定在应用界面的聊天选项卡上,虽然最初仅适用于每月3.99美元的SnapchatPlus付费订阅用户,但最终目…

图像分类综述

一、图像分类介绍 什么是图像分类,核心是从给定的分类集合中给图像分配一个标签的任务。实际上,这意味着我们的任务是分析一个输入图像并返回一个将图像分类的标签。标签来自预定义的可能类别集。 示例:我们假定一个可能的类别集categories …

Vue3+vite2 博客前端开发

Vue3vite2 博客前端开发 文章目录Vue3vite2 博客前端开发前言页面展示代码设计卡片设计背景(Particles.js粒子效果)右侧个人信息与公告内容页友链总结前言 大家是否也想拥有一个属于自己的博客?但是如何去开发博客,怎样去开发一个…

毫升 | 主成分分析(PCA)

这种方法是由Karl Pearson 介绍的。它的工作条件是,当高维空间中的数据映射到低维空间中的数据时,低维空间中数据的方差应最大。 主成分分析 (PCA) 是一种用于降低大型数据集维数的统计技术。它是机器学习、数据科学和其他处理大型数据集的领域中常用的…

如何通过C++ 将数据写入 Excel 工作表

直观的界面、出色的计算功能和图表工具,使Excel成为了最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一。这样不仅可以方便整理数据,还可以方便…

aspnet030高校学生团体管理系统sqlserver

net030高校学生团体管理系统 . 1.用户基本信息管理模块:录入、修改、删除、查询、统计、打印等功能 2.学生成绩管理模块:录入、修改、删除、查询、统计、打印等功能 3.学生团体信息管理模块:录入、修改、删除、查询、统计、打印等功能 4.教…

Excel技能之查找筛选排序,同事竖起大拇指

每天面对大量的数据,眼睛都看花了。头疼、脱发、颈椎病、胸闷、腰间盘突出,一系列并发症严重影响打工人的心情。同事看在眼里,痛在心里。 救救打工人吧!打工人的福音来了,自从学会了查找筛选排序,手脚利索…

动态规划(一) part1

T1:一个数组 中的最长 升序 子序列 的长度 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组…

C 非线性结构——树 万字详解(通俗易懂)

目录 一、树的介绍 1.定义 : 2.相关概念 : 3.简单分类 : 4.相关应用 : 二、树的存储 1.二叉树的存储 : 1 二叉树连续存储 2 二叉树链式存储(常用) 2.普通树和森林的存储 : 1 普通树的存储 2 森林的存储 三、树的遍历 1.二叉树先序遍历 : 2.二叉…

深度学习训练营之yolov5训练自己的数据集

深度学习训练营之训练自己的数据集原文链接环境介绍准备好数据集划分数据集运行voc_train.py遇到问题完整代码创建new_data.yaml文件模型训练时遇到的报错模型训练结果可视化参考链接原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&#x1f…

正则表达式

一、正则表达式的概述 1、概念 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操…