文件与IO流:一

news2025/1/15 14:11:44

一些常识

硬盘特点

擅长顺序读,不擅长随机读,尤其是机械硬盘。

随机读例如某个目录中的所有小文件的复制,顺序读是某个大文件的整体复制。

windows的文件系统是按照“树形结构”来组织文件。

路径的风格

1.绝对路径:从根节点出发,一层一层最终到达目标文件。

2.相对路径:从当前目录出发,找到目标文件,在IDEA中使用时可以用“.”来代替当前目录。也可以使用“..”来回退至上一层。

“/”与“\”的问题

首先“/”为正统写法,而“\”则是Windows的前身DOS提出的,所以windows额外支持“\”。还是推荐使用“/”。

文件的分类

文本文件:储存的文件在指定码表上都有据可查,都为合法的字符。

二进制文件:任意的二进制数字,不一定合法。

判断方法:可以使用记事本打开,为乱码的是二进制文件。

文本文件

二进制文件

Java中对文件操作的API

一、File类

所在包:java.io;

构造方法:File file = new  File(“文件路径/绝对路径”);

file.getPath():获取文件路径

file.getAbsolutePath():获取文件绝对路径。

file.createNewFile():创建文件。

file.delete():删除文件。

file.exists(): 判断文件是否存在。

file.deleteOnExit():在退出时删除文件。

file.renameTo(file2):将文件重命名为file2。

File file = new File("./src/text2.txt");
        file.createNewFile();
        file.delete();

二、InputStream与OutputStream

1.InputStream  t1 = new FileInputStream("文件路径");

FileInputStream为InputStream的子类。

方法:t1.read();

版本1:每次只读一个字符并返回这个字符的值(ASCII值),而且读到最后会返回-1.

版本2:可以先创建一个空的byte字符数组,当执行完成后字符数组中便传入了文件的内容(ASCII,可以使用char进行强转)。

版本3:在版本2的基础上增加了开始位置off和读入的字符长度len。

为了避免浪费过多的文件描述符表中的位置,每次使用后需要使用t1.close(),为了方便,可以使用try(nputStream  t1 = new FileInputStream("文件路径")){

};

这样在执行完{

}里的内容后,IDEA会自动调动t1.close()。

try(InputStream t1 = new FileInputStream("./src/text.txt")){
            int len = t1.read(buffer);
            for (int i = 0; i < len; i++) {
                System.out.print((char) buffer[i]+" ");
            }
        }

2.OutputStream t2 = new FileOutputStream(“文件路径”);

方法:t2.write();

版本1:一次写一个ASCII值。

版本2:写整个数组。

版本3:写数组的一部分(从off位置开始,写len个字符)。

注意:每次写入会清空原先的内容,可以使用追加来避免:

OutputStream t2 = new FileOutputStream("./src/text.txt",true);

即在末尾加个true。

三、Reader和Writer

1.Reader r = new FileReader(“文件路径”);

方法:

版本1:一次读一个字符。读到末尾返回-1.

版本2:将文件中的内容读到cbuf中去。

版本3:使用了封装了的char数组,

版本4:和前面的类似。

在显示cbuf中的内容时,可以使用String(cbuf,0,n);

n为有效的字符的下标,不然它会将所有的内容打印出来,包含未初始化的部分。

为什么推荐这个方法:在读文件时,如果碰到中文等utf8字符时,使用一次读一个字符的方法,会将utf8转化为unicode来打印,但是由于utf8为三个字节,char为两个字节,所以并不能打印,但是String(cbuf,0,n)可以将unicode转化为utf8.

 char[] cbuffer = new char[100];
        Reader r = new FileReader("./src/text.txt");
        r.read(cbuffer);
        System.out.println(new String(cbuffer,0,8));

2.Write w = new FileWrite("文件路径");

方法:w.write();

五个版本,但是主要使用w.write(String str)来使用字符串输入。

 在写入时也会清除原本的内容,但是也可以使用末尾加true来进行追加。

 Writer w = new FileWriter("./src/text.txt",true);
        w.write("Hello World");
        w.close();

四、Scanner辅助读文件

方法:

Scanner in = new Scanner(new FileInputStream("./src/text.txt"));
while (in.hasNextLine()) {
    String line = in.nextLine();
    System.out.println(line);
}

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

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

相关文章

计算机网络 (42)远程终端协议TELNET

前言 Telnet&#xff08;Telecommunication Network Protocol&#xff09;是一种网络协议&#xff0c;属于TCP/IP协议族&#xff0c;主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议&#xff0c;它允许用户通过终端仿真器连接到远程主机&#xff0c;并在远程…

WPF系列十二:图形控件CombinedGeometry

简介 CombinedGeometry 是 WPF (Windows Presentation Foundation) 中的一个几何对象&#xff0c;用于将两个几何图形组合成一个新的几何图形。它允许你通过不同的组合模式&#xff08;如相交、并集、差集或异或&#xff09;来创建复杂的形状。常与 Path 控件一起使用来绘制组…

《计算机网络》课后探研题书面报告_网际校验和算法

网际校验和算法 摘 要 本文旨在研究和实现网际校验和&#xff08;Internet Checksum&#xff09;算法。通过阅读《RFC 1071》文档理解该算法的工作原理&#xff0c;并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文&#xff08;包括ICMP、TCP、UDP等&a…

业务幂等性技术架构体系之接口幂等深入剖析

在实际应用中&#xff0c;由于网络不稳定、系统延迟等原因&#xff0c;客户端可能会重复发送相同的请求。如果这些重复请求都被服务器处理并执行&#xff0c;就可能导致意想不到的问题&#xff0c;比如重复扣款、多次下单或者数据不一致等。 这就是为什么我们需要接口幂等性。…

sql模糊关联匹配

需求目标&#xff1a; 建立临时表 drop table grafana_bi.zbj_gift_2024;USE grafana_bi; CREATE TABLE zbj_gift_2024 (id INT AUTO_INCREMENT PRIMARY KEY,userName VARCHAR(255),giftName VARCHAR(255),giftNum INT,points INT,teacher VARCHAR(255),sendDate DATETIME,…

《蜜蜂路线》

题目背景 无 题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你&#xff1a;蜜蜂从蜂房 mm 开始爬到蜂房 nn&#xff0c;m<nm<n&#xff0c;有多少种爬行路线&#xff1f;&#xff08;备注&#xff1a;题面有误&am…

LeetCode100之搜索二维矩阵(46)--Java

1.问题描述 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

WPS计算机二级•表格函数计算

听说这里是目录哦 函数基础知识 相对绝对混合引用&#x1f32a;️相对引用绝对引用混合引用 常用求和函数 SUM函数&#x1f326;️语法说明 函数快速求 平均数最值⚡平均数最值 实用统计函数 实现高效统计&#x1f300;COUNTCOUNTIF 实用文本函数 高效整理数据&#x1f308;RIG…

自动化测试工具Ranorex Studio(八十九)-解决方案浏览器

解决方案浏览器 除了为项目添加条目外&#xff0c;’Solution Explorer’允许你编辑解决方案的其他辅助选项。 例如&#xff0c;增加文件夹从而将项目中的录制模块和代码模块分离开来。 图&#xff1a;在solution browser中为项目添加文件夹 另外&#xff0c;你可以删除不用的…

2025 年 UI 大屏设计新风向

在科技日新月异的 2025 年&#xff0c;UI 大屏设计领域正经历着深刻的变革。随着技术的不断进步和用户需求的日益多样化&#xff0c;新的设计风向逐渐显现。了解并掌握这些趋势&#xff0c;对于设计师打造出更具吸引力和实用性的 UI 大屏作品至关重要。 一、沉浸式体验设计 如…

绘制三角形、正六边形、五角星、六角星

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>绘制图形</title><style>body {displ…

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…

Node.js - HTTP

1. HTTP请求 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端&#xff08;通常是浏览器、手机应用或其他网络工具&#xff09;发送给服务器的消息&#xff0c;用来请求资源或执行…

鸿蒙中自定义slider实现字体大小变化

ui&#xff1a; import { display, mediaquery, router } from kit.ArkUI import CommonConstants from ./CommonConstants; import PreferencesUtil from ./PreferencesUtil; import StyleConstants from ./StyleConstants;// 字体大小 Entry Component struct FontSize {Sta…

Springboot + vue 小区物业管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

RabbitMQ中有哪几种交换机类型?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ中有哪几种交换机类型&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;交换机&#xf…

Uniapp中实现加载更多、下拉刷新、返回顶部功能

一、加载更多&#xff1a; 在到达底部时&#xff0c;将新请求过来的数据追加到原来的数组即可&#xff1a; import {onReachBottom } from "dcloudio/uni-app";const pets ref([]); // 显示数据function network() {uni.request({url: "https://api.thecatap…