Java文件与IO

news2024/12/26 22:39:31

文章目录

  • 前言认识文件
    • 绝对路径与相对路径
    • 普通文件与二进制文件
  • Java中的操作文件
    • File 类
    • 文件的读写

前言认识文件

狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,文件由文件夹以及目录来管理;

绝对路径与相对路径

绝对路径: 是固定的,是不变的,唯一路径
相对路径 : 是根据你当前所在的节点所往后推导的路径

普通文件与二进制文件

普通文件: 用记事本打开能看
二进制文件: 用记事本打开看不了
也可以看下面字符集的编码格式

Java中的操作文件

File 类

构造方法
在这里插入图片描述

 public static void main(String[] args) throws IOException {
        File file = new File("..\\hello-world.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());
        // 判断文件是否存在
         System.out.println(file.exists());
         // 判断文件是否是目录
        System.out.println(file.isDirectory());
        // 判断是不是一个普通文件
        System.out.println(file.isFile());
        // 创建一个新的文件
        System.out.println(file.createNewFile());
        //删除一个文件
         System.out.println(file.delete());
         //创建目录
          System.out.println(dir.mkdir());
          //文件重命名
           System.out.println(file.renameTo(dest));
     
   }

文件的读写

InputStream

int read() 读取一个字节的数据,返回 -1 代表已经完全读完了
int read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
int read(byte[] b,int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
void close() 关闭字节流

InputStream 只是一个抽象类,要使用还需要具体的实现类。

 try (InputStream is = new FileInputStream("hello.txt")) {
            while (true) {
                int b = is.read();
                if (b == -1) {
                    // 代表文件已经全部读完
                    break;
               }
                
                System.out.printf("%c", b);
           }
       }
public static void main(String[] args) throws IOException {
//文件内容中填充中文
        try (InputStream is = new FileInputStream("hello.txt")) {
            byte[] buf = new byte[1024];
            int len;
            while (true) {
                len = is.read(buf);
                if (len == -1) {
                    // 代表文件已经全部读完
                    break;
               }
                // 每次使用 3 字节进行 utf-8 解码,得到中文字符
                // 利用 String 中的构造方法完成
                // 这个方法了解下即可,不是通用的解决办法
                for (int i = 0; i < len; i += 3) {
                    String s = new String(buf, i, 3, "UTF-8");
                    System.out.printf("%s", s);
               }
           }
       }
   }

对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,我们使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner 类。

try (InputStream is = new FileInputStream("hello.txt")) {
           try (Scanner scanner = new Scanner(is, "UTF-8")) {
               while (scanner.hasNext()) {
                   String s = scanner.next();
                   System.out.print(s);
               }
           }
       }

OutputStream

void write(int b) 写入要给字节的数据
void write(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
int write(byte[]b, int off,int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close() 关闭字节流
void flush() 重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为
了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的
一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写
入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的
数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,
调用 flush(刷新)操作,将数据刷到设备中。

 try (OutputStream os = new FileOutputStream("output.txt")) {
 // 字符写入
            os.write('H');
            os.write('e');
            os.write('l');
            os.write('l');
            os.write('o');
            // 不要忘记 flush
            os.flush();
       }
 try (OutputStream os = new FileOutputStream("output.txt")) {
           String s = "Nothing";
            byte[] b = s.getBytes();
            os.write(b);
          
            // 不要忘记 flush
            os.flush();
       }
 try (OutputStream os = new FileOutputStream("output.txt")) {
            String s = "你好中国";
            byte[] b = s.getBytes("utf-8");
         os.write(b);
            
            // 不要忘记 flush
            os.flush();
       }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ基础概念

目录 1.简介 2.架构 3.核心概念 1.简介 RocketMQ 是一款开源的分布式消息中间件&#xff0c;最初由阿里巴巴集团开发并开源。它旨在为分布式系统提供可靠、高性能、可扩展的消息通信能力。RocketMQ和RabbitMQ、KAFKA一起并列为现在主流的三大消息中间件。 一般MQ可以从三个…

Python(八)字符编码

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

06_HDMI 显示器驱动设计与验证

06_HDMI 显示器驱动设计与验证 1. HDMI 接口及引脚定义1.1 HDMI A Type 接口引脚图1.2 HDMI A Type 接口引脚定义 2. HDMI 原理2.1 HDMI 显示原理2.2 TMDS 传输原理 3. 实验目标4. 程序框图4.1 顶层模块4.2 时钟生成模块4.3 HDMI 驱动控制模块4.3.1 第一个步骤4.3.2 编码模块参…

反垄断在中国

中国通过反垄断法 中国通过了具有里程碑意义的反托拉斯立法,外国企业表示谨慎性的欢迎,希望该法案能带来更大的开放性,但需要观察它是如何实施的。(华尔街日报 2007年8月32日报道) 反垄断法禁止垄断协议和诸如卡特尔及价格操纵,但允许能促进创新和技术进步的垄断之存在。…

微软亚洲研究院推出AI编译器界“工业重金属四部曲”

编者按&#xff1a;编译器在传统计算科学中一直是一个重要的研究课题。在人工智能技术快速发展和广泛应用的今天&#xff0c;人工智能模型需要部署在多样化的计算机硬件架构上。同时&#xff0c;训练和部署大型人工智能模型时又对硬件性能有着更高的要求&#xff0c;有时还需根…

c#示例-json序列化和json树

序列化 由于指针和引用类型的存在&#xff0c;在运行中的程序中&#xff0c;数据不一定是整块的。 可能东一块西一块散落在内存的各个地方。 序列&#xff0c;是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。 经过这样处理后的数据就可以方便的进行传输…

1130 - Host XXX‘ is not allowed to connect to this MySQL server

mysql 连接报错 这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有没有用户 解决的方法&#xff1a; 登入mysql后&#xff0c;更改 “mysql” 数据库里的 “user” 表里的 “host” 项&#xff0c;从”localhost”改称’%’。 1、连接服务器: mysql -u root -p…

万字解读 | 数据可视化平台--FineBI

什么是BI 学习目标 知道什么是BI 知道FineBI的优势 1. 商业智能: BI&#xff08;Business Intelligence&#xff09;是指通过收集、分析和解释企业内外部数据&#xff0c;为企业决策提供支持和指导的一种技术和工具。商业智能的目标是帮助企业管理者和决策者更好地理解企业…

vivado 添加 pynq-z2板

以vivado2019.02版本为例 1下载地址 https://www.tulembedded.com/FPGA/ProductsPYNQ-Z2.html 2.点击下载 3.解压添加 注&#xff1a;如果没有board_files 可以自己创建一个 4.重新打开vivado

跨境电商企业实施WMS仓储管理系统有什么要注意的

在跨境电商行业中&#xff0c;仓储管理是关键的环节之一。为了提高仓储效率和准确性&#xff0c;许多跨境电商企业选择实施WMS仓储管理系统解决方案。然而&#xff0c;实施电商企业WMS系统并不是一项简单的任务&#xff0c;需要注意一些关键要点。本文将介绍跨境电商企业实施WM…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试&#xff08;1&#xff09; Apollo 6.0 安装完全指南 在这一步出错&#xff1a; 进入到 Apollo 源码根目录&#xff0c;打开终端&#xff0c;执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

科技成果鉴定报告的重要性

科技成果鉴定是评估科技成果价值、可行性和科学性的过程&#xff0c;鉴定结果直接关系到科技成果的应用和推广。科技成果鉴定报告是鉴定结果的呈现和总结&#xff0c;对于科技成果的评估和利用具有重要的价值和意义。 1、科技成果价值评估&#xff1a;在科技创新和技术发展中…

在VMware Workstation安装 ESXI8.0初体验

文章目录 &#x1f41f;前言&#x1f41f;安装&#x1f41f;在VMware WorkStation中创建虚拟机&#x1f41f;ESXI部署安装&#x1f41f;安装完成后配置 &#x1f41f;前言 ESXI8.0版本开始最低RAM从以前的4GB变为8GB 本文所使用到的镜像以及Key都可以到我的网站中下载 地址&…

数学分析:k维曲面

这部分比较抽象&#xff0c;我就不按照书本上的定义来了&#xff0c;直接讲直观的理解。 一般来说&#xff0c;我们认为&#xff1a; 这是一个圆&#xff0c; 但同时也可以认为他是一个一维的曲面。 同理 是一个球面 但同时也是一个二维的曲面&#xff0c;依次类推。 我们…

AWS 云区域(region),可用区(AZ)

AWS 提供三种地理性组件&#xff1a; Regions&#xff1a;区域&#xff0c;即AWS提供云服务的一个区域&#xff0c;其目的是为了用户能就近接入&#xff0c;降低网络延迟。通常是一个城市的若干个AZ组成一个region。2016年&#xff0c;AWS 宣布在其全球region之间建设了100GbE…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案&#xff0c;可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具&#xff0c;ANT是一个构建工具&#xff0c;而JMeter是一个功能强大…

journalctl命令

要查看系统日志信息&#xff0c;使用journalctl工具即可。 不加任何参数&#xff0c;它将显示系统日志的全部信息&#xff1a;显示的顺序是从旧到新。 [rootvm1 ~]# journalctl -- Logs begin at Fri 2023-07-14 05:12:22 CST, end at Thu 2023-07-13 21:20:01 CST. -- Jul 14…

re学习(15)BUUCTF 2019红帽杯easyRe

参考视频&#xff1a; 【BUUCTF】每天一个CTF11“2019红帽杯easyRe”_哔哩哔哩_bilibili &#xff08;本人觉得看视频比看博客效率能提高十倍&#xff0c;呜呜呜&#xff0c;还是视频香~~~与君共勉&#xff09; 下载地址&#xff1a; BUUCTF在线评测 前言&#xff1a;虽然…

论文出矢量图EMF

PDF---->矢量图EMF工具&#xff1a; PDF to EMF | CloudConvert solidworks截图打印为PDF&#xff1b; matlab打开图像--编辑-复制--粘贴 - CAD打印输出PDF

传输网络介绍

文章目录 1、通信传输介质有哪些&#xff1f; 同轴电缆 –由外到内分别是&#xff1a;塑料皮层、屏蔽层、绝缘层、铜芯。 光纤 –由圆玻璃纤芯和玻璃包层构成&#xff0c;最外层是塑料护套。 双绞线 –由两根具有绝缘保护层的互相绞在一起铜导线组成的。 2、通信网络常见的组…