文件IOoooo

1.1 文件路径

文件路径分为两种:

1、绝对路径:以C:、D:等盘符开头的,就是我们所说的绝对路径,根据它可以直接找到文件的具体位置。

2、相对路径:需要先指定一个目录作为基准目录,从基准目录出发,看看按照什么样的路径寻找能找到指定文件,这就是相对路径;相对路径通常是以.(当前目录)或者..(当前目录的上级目录)开头的。

1.2 文件类型

常见的文件类型分为两种:

1、文本文件:文件中保存的内容都是字符串,保存的都是合法的内容,简单来说就是打开之后我们能看懂,不是乱码。

2、二进制文件:文件中保存的内容是二进制数据,不要求保存合法的内容,打开文件之后看到一堆乱码就是这种情况。

1.3 文件操作

在Java中,通常通过java.io.file来描述一个文件。

文件的构造方法通常为:File(String pathname)

对文件操作的方法通常有以下几种:

File file = new File("d://text.txt");//构造文件,参数为文件的路径
System.out.println(file.getParent());//返回该文件的父目录文件路径
System.out.println(file.getName());//返回该文件的纯文件名称
System.out.println(file.getPath());//返回该文件的路径
System.out.println(file.getAbsolutePath());//返回该文件的绝对路径
System.out.println(file.getCanonicalPath());//返回修饰过的绝对路径

 

File f = new File("d:/text.txt");
System.out.println(f.exists());//判断文件是否存在
System.out.println(f.isDirectory());//判断文件是否是一个目录
System.out.println(f.isFile());//判断文件是否为一个普通文件
System.out.println(f.createNewFile());//如果文件不存在,则创建一个新的文件
System.out.println(f.exists());
System.out.println(f.delete());//删除文件
System.out.println(f.exists());

1.4 文件内容的读写

对于文件内容的读写分为字节流和字符流两种类型,下面我们进行分别介绍。

1.4.1 字符流

1、reader(读文件)

2、writer(写文件)

File file = new File("d:/test.txt");
System.out.println(file.exists());
Writer writer = new FileWriter("d:/test.txt");//构造一个写文件对象
writer.write("我在学习文件io");//向文件中写内容
writer.close();//关闭文件
Reader reader = new FileReader("d:/test.txt");//构造一个读文件对象
while(true){//设置循环的目的是因为文件的内容很多,得读很多次,直到读完
    int a = reader.read();//read方法返回的是一个int类型的数据
    if(a == -1){//当数字的值为-1时,代表文件已经读完,直接结束循环
        break;
    }
    else{
        char c = (char)a;//将整型强制转换为字符型
        System.out.println(c);//输出字符
    }
}
reader.close();//关闭文件

Reader reader1 = new FileReader("d:/test.txt");
char[] cbuf = new char[1024];//构造一个字符数组用来存储读出的内容
int n = reader1.read(cbuf);//设置参数,此时每次读都会读一个数组的大小,返回内容字符数
for (int i = 0;i < n;i++){
    System.out.print(cbuf[i]);//输出数组中的内容
}
reader1.close();//关闭文件

 

注意:一定要记得关闭文件,否则会使文件资源泄露,类似于内存资源泄露,时间长了可能会出现意想不到的错误!!!

1.4.2 字节流

1、InputStream(读文件)

2、OutputStream(写文件)

File file = new File("d:/test.txt");
System.out.println(file.exists());
InputStream inputStream = new FileInputStream("d:/test.txt");//构造输入字符流对象
while(true){//类似字符流读方法,不断循环读取数据
    int a = inputStream.read();
    if(a == -1){
        break;
    }
    else{
        char c = (char)a;
        System.out.println(c);
    }
}

Scanner scanner = new Scanner(inputStream,"UTF-8")//读出特定格式的数据
while(scanner.hasNext()){
    String s = scanner.next();
    System.out.println(s);
}

inputStream.close();

 

File file = new File("d:/test.txt");
OutputStream outputStream = new FileOutputStream("d:/test.txt");
outputStream.write('H');
outputStream.write('e');
outputStream.write('l');
outputStream.write('l');
outputStream.write('o');
outputStream.flush();//此处要对缓冲区进行刷新,将缓冲区中的数据立即写入到硬盘中
outputStream.close();

1.5 小工具demo

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入要扫描的根目录");
    String rootDirpath = scanner.next();
    File file = new File(rootDirpath);
    if(!file.isDirectory()){
        System.out.println("您输入的目录不存在或者不是目录,退出");
        return;
    }
    System.out.println("请输入要找出的文件名中包含的字符");
    String token = scanner.next();
    scanDir(file,token);
}

private static void scanDir(File file, String token) {
    File[] files = file.listFiles();
    if(files == null){
        return;
    }
    for(File f : files){
        System.out.println("当前扫描的文件" + f.getAbsolutePath());
        if(f.isFile()){
            checkDelete(f,token);
        }
        else{
            scanDir(f,token);
        }
    }
}

private static void checkDelete(File f, String token) {
    if(!f.getName().contains(token)){
        return;
    }
    System.out.println("当前文件为" + f.getAbsolutePath() + "请确认是否要删除(y/n)");
    Scanner scanner = new Scanner(System.in);
    String choice = scanner.next();
    if(choice.equals("Y") || choice.equals("y")){
        f.delete();
        System.out.println("删除完毕");
    }
    else{
        System.out.println("取消删除");
    }

 

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

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

相关文章

python的resample()函数

介绍 在Python中,resample()函数是一个常用的工具,用于对时间序列数据进行重新采样。这个函数可以将时间序列数据从一个频率转换为另一个频率,比如将每天的数据转换为每月的数据。在本教程中,我将向你展示如何使用resample()函数,并解释每个步骤的具体含义。 整体流程 首先…

SAP PP学习笔记20 - 复习总结一下MTS,MTO,ATO的各种生产策略

上面几章详细讲了MTS&#xff0c;MTO&#xff0c;ATO的各种生产策略。 内容太多了&#xff0c;本章咱们就简单回顾&#xff0c;复习一下。 计划策略(Planning Strategies) 的种类 - MTS&#xff08;Make-to-Stock&#xff09;&#xff1a;按库存生产&#xff08;見込生産&…

SAP CR02 更改工作中心 CRAP_WORKCENTER_CHANGE

SAP 创建&#xff0c;修改工作中心实例代码 SE24 CL_PP_WORK_CENTER_BO Work Center API Business Object UPDATE_CAPACITY Update Capacity GET_INSTANCE Get instance of class CL_PP_WORK_CENTER_BO CREATE_WORK_CENTER Create Work Center UPDATE_WORK_CENTER …

STM32硬件接口I2C应用(基于HMC5883L)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识HMC5883L 3.1 HMC5883L功能介绍 3.2 HMC5883L的寄存器 4 HMC5883L驱动程序实现 4.1 驱动函数实现 4.2 完整驱…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前&#xff0c;数据库存储系统与人工智能技术的结合&#xff0c;可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型&#xff08;LLM&#xff0c;简称大模型&#xff09;的嵌入&#xff08;embedding&#xff09;技术&am…

如何低成本、高效搭建线上3D艺术展?

随着数字技术的日新月异&#xff0c;艺术展览领域正迎来一场革新。未来的艺术展览将不再是单一的线下体验&#xff0c;而是线上线下相互融合&#xff0c;其中&#xff0c;3D线上展览将成为线下展览的重要延伸与拓展&#xff0c;为广大观众提供更多元化的选择。 对于艺术家和策…

限流器设计思路(浅入门)

限流器(Rate Limiter)是一种用于控制系统资源利用率和质量的重要机制。它通过限制单位时间内可以执行的操作数量&#xff0c;从而防止系统过载和保护服务的可靠性。在程序设计中&#xff0c;可以使用多种方式来实现限流器&#xff0c;下面是几个常见方案的介绍&#xff1a; 令牌…

2024年,计算机相关专业还值得选择吗? 又该如何判断自己是否适合这类专业呢?

文章目录 一、2024年,计算机相关专业还值得选择吗?二、判断自己是否适合这类专业呢&#xff1f;三、哪所大学的计算机专业最好&#xff1f;四、计算机专业是否仍具有长远的发展潜力和就业前景呢? 一、2024年,计算机相关专业还值得选择吗? 在2024年选择大学专业时&#xff0…

开源完全自动化的桌上足球机器人Foosbar;自动编写和修复代码的AI小工具;开源工具,可本地运行,作为Perplexity AI的替代方案

✨ 1: Foosbar Foosbar是一款完全自动化的桌上足球机器人&#xff0c;能与人类玩家对战&#xff0c;具备防守、传球和射门能力。 Foosbar是一个完全自动化的桌上足球机器人&#xff0c;它实现了一侧由机器人控制&#xff0c;另一侧由人类玩家对战的游戏模式。这个机器人能够自…

【论文阅读】Activity Recognition using Cell Phone Accelerometers

Activity Recognition using Cell Phone Accelerometers 引用&#xff1a; Kwapisz J R, Weiss G M, Moore S A. Activity recognition using cell phone accelerometers[J]. ACM SigKDD Explorations Newsletter, 2011, 12(2): 74-82. 论文链接&#xff1a; Activity recogn…

基于JSP的贝儿米幼儿教育管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对本系统感兴趣或者有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; JSP技术 工具&#xff1a; IDEA/Eclipse、…

西南交通大学【操作系统实验7】

实验目的 &#xff08;1&#xff09;理解内存管理中缺页的概念。&#xff08;2&#xff09;综合运用实验1&#xff0c;实验5&#xff0c;实验6中/proc文件系统、内存管理、系统调用、 内核编译的知识。&#xff08;3&#xff09;掌握向/proc文件系统中增加文件的方法。&#…

人人必看:人工智能成熟后,被社会广泛使用后,可能被取代的行业有哪些,以及AI后新兴的行业和职位有哪些?

随着人工智能技术的不断成熟和广泛应用&#xff0c;许多行业和职位可能会受到影响&#xff0c;一些可能被取代&#xff0c;而另一些则会因为AI技术的引入而新兴。人人必看&#xff1a;人工智能成熟后&#xff0c;被社会广泛使用后&#xff0c;可能被取代的行业有哪些&#xff0…

高德地图AI革新:智能导航提升驾驶安全与个性化体验

AITOP100平台了解到&#xff0c;近期&#xff0c;高德地图的用户们在社交平台上分享了令人惊叹的体验&#xff0c;纷纷点赞并称之为“黑科技”。这源于高德地图推出的“车道级安全预警”功能&#xff0c;这一创新不仅适用于两轮和四轮车辆&#xff0c;也成为新老司机的出行必备…

Matlab使用Simulink仿真实现AM和BPSK信号的解调及误码率对比

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

乡村振兴的多元化产业发展:推动农村一二三产业融合发展,培育乡村新业态,打造多元化发展的美丽乡村

一、引言 乡村振兴是我国当前及未来一段时间内的重大战略任务&#xff0c;旨在促进农村经济的全面发展&#xff0c;提高农民的生活水平&#xff0c;实现城乡融合发展。在乡村振兴的进程中&#xff0c;推动农村一二三产业融合发展&#xff0c;培育乡村新业态&#xff0c;是打造…

绿色转型,节能攻坚

随着人口增长和经济发展&#xff0c;资源短缺和环境污染问题愈发严重&#xff0c;绿色转型和节能已成为我们共同的责任。为了推动环保事业的发展&#xff0c;阜阳善于善行志愿者团队&#xff0c;参与了本年度以“绿色转型&#xff0c;节能攻坚”为主题的全国节能宣传周活动。这…

echart盒子没有跟着当前div大小变化而自适应

一、问题描述 当echarts图表在一个盒子里的时候&#xff0c;盒子大小变化了&#xff0c;但是图表没有跟着自适应&#xff0c;比如这样&#xff0c;盒子变大了&#xff0c;但是图表没变化 二、解决方法 在盒子大小更改的同时&#xff0c;调用图表的resize方法&#xff0c;记…

海思Hi3519DV500方案1200万无人机吊舱套板

海思Hi3519DV500方案1200万无人机吊舱套板 Hi3519DV500 是一颗面向行业市场推出的超高清智能网络摄像头SoC。该芯片最高 支持四路sensor 输入&#xff0c;支持最高4K30fps 的ISP 图像处理能力&#xff0c;支持2F WDR、 多级降噪、六轴防抖、全景拼接、多光谱融合等多种传统图像…

FL Studio21永久免费破解中文版下载,让我这个音乐制作爱好者如获至宝!

FL Studio21永久免费破解中文版下载&#xff0c;让我这个音乐制作爱好者如获至宝&#xff01;&#x1f3b6; 这款软件功能强大&#xff0c;操作简单易上手。我可以轻松地创作出各种风格的音乐作品。无论是流行、摇滚还是电子音乐&#xff0c;都能轻松驾驭。&#x1f3a7; 使用F…