JavaIO流(一)

news/2025/2/12 21:37:12/文章来源:https://www.cnblogs.com/zlyh/p/18712174

JavaIO流

java中的变量、数组、对象、集合它们都是内存中的数据容器,它们记住的数据,在断电,或者程序终止时会丢失,故要使用到文件。

  • 文件是非常重要的存储方式,在计算机硬盘中
  • 即使断电,或者程序终止了,存储在硬盘文件中的数据也不会丢失

Flie

  • File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
  • 注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。

IO流

  • 用于读写数据的(可以读写文件,或者网络中的数据...)

1.File类

1.创建File类的对象

方法:

  • public File(String pathname) :根据文件路径创建文件对象
  • public File(String parent,String child):根据父路径和子路径名字创建文件对象
  • public File(File parent,String child):根据父路径对应文件对象和子路径名字创建文件对象

注意:

  • File 对象既可以代表文件、也可以代表文件夹
  • File 封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许时不存在的

绝对路径:带盘符的

File f3 = new File("C:\\Users\\17595\\Desktop\\java\\JavaProject\\JavaSE\\basic-grammar\\src\\yehuan.txt");

相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。

new File("模块名 \\src\\yehuan.txt");

代码演示:

package com.IO.File;import java.io.File;public class FileTest1 {public static void main(String[] args) {//1.创建一个Flie对象,指代某个具体的文件//路径分隔符(File.separator 可以自适应系统的路径分隔符 --- 跨平台)//File f1 = new File("C:\\Users\\17595\\Desktop\\java\\resource\\ab.txt");//File f1 = new File("C:/Users/17595/Desktop/java/resource/ab.txt");File f1 = new File("C:"+File.separator+"Users"+File.separator+"17595"+File.separator+"Desktop"+File.separator+"java"+File.separator+"resource"+File.separator+"ab.txt");System.out.println(f1.length());//文件大小//注意:File对象可以指代一个不存在的文件路径File f2 = new File("C:/Users/17595/Desktop/java/resource/aaaa.txt");System.out.println(f2.length());//0System.out.println(f2.exists());//false(判断文件路径是否存在)//我现在要定位的文件是在模块中,应该怎么定位呢?//绝对路径:带盘符的// File f3 = new File("C:\\Users\\17595\\Desktop\\java\\JavaProject\\JavaSE\\basic-grammar\\src\\yehuan.txt");//相对路径(重点):不带盘符,默认是直接去工程下寻找文件的//new File("模块名 \\src\\yehuan.txt");File f3 = new File("basic-grammar\\src\\yehuan.txt");System.out.println(f3.length());}
}

2.常用方法

判断文件类型、获取文件信息:

  • public boolean exists() : 判断当前文件对象,对应的文件路径是否存在,存在返回true,不存在返回false。
  • public boolean isFile() : 判断当前文件对象指代的是否是文件,是文件返回true,反之。
  • public boolean isDirectory() : 判断当前文件对象指代的是否为文件夹
  • public String getName(): 获取文件的名称(包含后缀)
  • public long length() : 获取文件大小,返回字节个数
  • public long lastModified() : 获取文件的最后修改时间。
  • public String getPath() : 获取创建文件对象时,使用的路径
  • public String getAbsolutePath() : 获取绝对路径
package com.IO.File;import java.io.File;
import java.text.SimpleDateFormat;
import java.util.SimpleTimeZone;public class FlieTest02 {public static void main(String[] args) {//1. 创建文件对象,指代某个文件File f1 = new File("C:\\Users\\17595\\Desktop\\java\\resource\\ab.txt");//2.public boolean exists() : 判断当前文件对象,对应的文件路径是否存在,存在返回true,不存在返回false。System.out.println(f1.exists());//3.public boolean isFile() : 判断当前文件对象指代的是否是文件,是文件返回true,反之。System.out.println(f1.isFile());//4.public boolean isDirectory() : 判断当前文件对象指代的是否为文件夹System.out.println(f1.isDirectory());//5.public String getName(): 获取文件的名称(包含后缀)System.out.println(f1.getName());//6.public long length() : 获取文件大小,返回字节个数System.out.println(f1.length());//7.public long lastModified() : 获取文件的最后修改时间。long time = f1.lastModified();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(time));//8.public String getPath() : 获取创建文件对象时,使用的路径System.out.println(f1.getPath());//9.public String getAbsolutePath() : 获取绝对路径System.out.println(f1.getAbsolutePath());}
}

创建文件、删除文件:

  • public boolean creatNewFile(): 创建一个新文件(文件内容为空),创建成功返回true,反之。
  • public boolean mkdir() : 用于创建文件夹,注意:只能创建一级文件夹
  • public boolean mkdir() : 用于创建文件夹,注意:可以创建多级文件夹
  • public boolean delete() : 删除文件、或者空文件,注意:不能删除非空文件。

注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站

package com.IO.File;import java.io.File;
import java.io.IOException;public class FileTest03 {public static void main(String[] args) throws Exception {//1.public boolean creatNewFile(): 创建一个新文件(文件内容为空),创建成功返回true,反之。File f1 = new File("C:\\Users\\17595\\Desktop\\\\java\\resource\\yehuan.txt");System.out.println(f1.createNewFile());//会出现异常,直接抛异常//2.public boolean mkdir() : 用于创建文件夹,注意:只能创建一级文件夹File f2 = new File("C:/Users/17595/Desktop/java/resource/abc");System.out.println(f2.mkdir());//3.public boolean mkdir() : 用于创建文件夹,注意:可以创建多级文件夹File f3 = new File("C:/Users/17595/Desktop/java/resource/aaa//bbb/ccc");System.out.println(f3.mkdirs());//4.public boolean delete() : 删除文件、或者空文件,注意:不能删除非空文件。System.out.println(f1.delete());}
}

遍历文件夹:

  • public String[] list(): 获取当前目录下所有的“一级文件名称” 到一个字符串数组中去返回
  • public File[] listFiles(): (重点) 获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(重点)

使用listFiles方法时的注意事项:

  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在Flie数组中返回
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径的路径放在数组中返回,包含隐藏文件
  • 当主调是一个文件夹,但是没有权限访问该文件时,返回null
package com.IO.File;import java.io.File;public class FileTest04 {public static void main(String[] args) {//1. public String[] list(): 获取当前目录下所有的“一级文件名称” 到一个字符串数组中去返回File f1 = new File("C:/Users/17595/Desktop/java/resource");String[] name = f1.list();for (String str : name) {System.out.println(str);}//2. public File[] listFiles(): (重点) 获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(重点)File[] files = f1.listFiles();for (File file : files) {System.out.println(file.getAbsoluteFile());}}
}

案例:目标:改变某个文件夹下视频的序号,要求从19开始:

package com.IO.File;import java.io.File;//目标:改变某个文件夹下视频的序号,要求从19开始
public class Test {public static void main(String[] args) {File dir = new File("C:/Users/17595/Desktop/java/resource");//1.拿到下面全部的视频,一级文件对象File[] videos = dir.listFiles();//2.一个一个的找for (File video : videos) {//3.拿到它的名字,改成新名字String name = video.getName();String index = name.substring(0,name.indexOf("、"));String lastName = name.substring(name.indexOf("、"));String newName = (Integer.valueOf(index)+18)+lastName;//4.正式改名video.renameTo(new File(dir,newName));}}}

案例2:文件搜索的实现(利用递归)

package com.IO.File;import java.io.File;
import java.io.IOException;// 文件搜索的实现
public class Test2 {public static void main(String[] args) throws Exception {creashFile(new File("D:/"),"QQ.exe");}/*** 去目录下搜索某个文件* @param dir 目录* @param fileName 要搜索的文件名称*/public static void creashFile(File dir,String fileName) throws Exception {//1. 把非法的情况都拦截住if(dir==null || !dir.exists() || dir.isFile()){return; //代表无法搜索}//2.dir不是null,存在,一定是目录对象File[] files = dir.listFiles();//3.判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象if(files != null && files.length > 0){//4.遍历全部一级文件对象for (File f : files) {if(f.isFile()){if(f.getName().contains(fileName)){System.out.println("找到了:"+f.getAbsolutePath());//找到后直接启动(runtime类)Runtime rt = Runtime.getRuntime();rt.exec(f.getAbsolutePath());}}else {// 是文件夹,继续重复这个过程(递归)creashFile(f,fileName);}}}}
}

3.前置知识:字符集

标准的ASCII字符集

  • ASCII:美国信息交换标准代码,包括了英文、符号等
  • 标准ASCII使用1个字节存储一个字符,首位是0,总共可以表示128个字符,对美国人来说是完全够用了

GBK(汉字内码扩展规范,国标)

  • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储
  • 注意:GBK兼容了ASCII字符集
  • GBK规定:汉字的第一个字节的第一位必须是1

Unicode字符集(统一码,也叫万国码)

  • Unicode是国际组织指定的,可以容纳世界上所有的文字、符号的字符集(UTF-32)

UTF-8

  • 是Unicode字符集的一种编码方案,采用可变长编码方案,共分四个长度区:1个字节、2个字节、3个字节、4个字节
  • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节

注意:

  • 字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
  • 英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码

字符集的编码和解码操作

编码:把字符按照指定字符集编码成字节

解码:把字节按照指定字符集解码成字符

package com.IO.codeset;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class Test01 {public static void main(String[] args) throws Exception {//1.编码String data = "a我b";byte[] bytes = data.getBytes();//默认是按照平台字符集(UTF-8)进行的编码System.out.println(Arrays.toString(bytes));//按照指定字符集进行编码byte[] bytes2 = data.getBytes("GBK");System.out.println(Arrays.toString(bytes2));//2.解码String s1 = new String(bytes); //按照平台默认编码(UTF-8)解码System.out.println(s1);String s2 = new String(bytes2,"GBK");System.out.println(s2);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 项目接入 DeepSeek,分享两种超简单的方式!

DeepSeek 作为一款卓越的国产 AI 模型,越来越多的公司考虑在自己的应用中集成。对于 Java 应用来说,我们可以借助 Spring AI 集成 DeepSeek,非常简单方便! 相关文章推荐:DeepSeek 的这波回答我给满分! IDEA 接入 DeepSeek,太酷了!Spring AI 是什么? Spring AI 从著名的 …

我命由我不由天?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

是“陷阱”还是“机遇”,怎么办?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

deepseek-v3 论文阅读

deepseek-v3论文中 AIInfra相关的技术学习模型结构 MLA(Multi-Head Latent Attention) 主要作用是在保证效果的基础上, 利用低秩压缩的原理优化kvCache, 加速推理, 同时节省训练显存. 先回忆下MHA, 在每个head上, 分别经过K, V生成 $ attnweights=(W_Qh_i)^T∗(W_Kh_j) $, 然后…

大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!

1 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来! 1.1 背景目前AI已经大行其道,chatGPT、DeepSeek等如雨后春笋般涌现出来,笔者做为一个守旧派和顽固派,一直认为AI只是雕虫小技,根本没有办法和人写的代码相提并论,在chatGPT已经大火几年之后仍然一直无动于衷…

【洛谷P1196】银河英雄传说[NOI2002]

今天学习提高版的并查集 洛谷200题纪念! 首先我们看题目 P1196 [NOI2002] 银河英雄传说 题目背景 公元 \(5801\) 年,地球居民迁至金牛座 \(\alpha\) 第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。 宇宙历 \(799\) 年,银河系的两大…

P3826 [NOI2017] 蔬菜 题解

Description 有 \(n\) 种蔬菜,对于所有的满足条件 \(d\times x_i \leq c_i\) 的正整数 \(d\) ,有 \(x_i\) 个单位的蔬菜将在 第 \(d\) 天结束时变质。 特别地,若 \((d - 1)\times x_i \leq c_i < d\times x_i\) ,则有 \(c_i - (d - 1)\times x_i\) 单位的蔬菜将在第 \(d…

什么是token?token是用来干嘛的?

从事计算机行业的朋友都听说过token这么个东西,尤其是deepseek爆火后api(大家都知道什么意思吧),但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?token是用来干嘛的这一块的内容,希望能帮助到大家。token是什么意思? 作为计算机术语时,…

uniapp 开发app流程

准备: DCLOUD开发者账号、IOS开发者账号、高德地图开发者账号 1、在DCLOUD平台创建【应用】在应用中设置【各平台信息】,安卓的包名自己写一个,ios BundleId在ios开发者账号中获取,本教程以安卓为主,ios方面的问题暂时忽略记住这个列表中的 安卓的包名 和 ISO的域名/Bundl…

智能驾驶中的 感知 模块介绍

在自动驾驶系统中,感知技术是核心基础之一。感知技术为车辆提供环境信息,使其能够实现对周围环境的理解、分析与决策,从而保证安全性和高效性。通常大家对感知的介绍停留在“眼睛”的作用,但这样的解释太宽泛了例如感知到底是什么?由哪些模块组成?输入输出有什么含义?数…

AI行为识别摄像机

AI行为识别摄像机具备24小时不间断的视频监控能力,可以随时捕捉现场动态,确保无死角覆盖。通过训练好的模型,该设备能够对不同的人类活动进行分类和判断,从而有效区分正常与异常行为。例如,在商场中,当检测到顾客有异常举动时,系统会立即发出警报。相比于传统监控设备,…