java文件

article/2025/9/23 21:13:46

File

File创建

		1.根据路径构建FileFile file = new File("d:\\1.txt");2.根据父目录文件+子路径构建文件File parentFile = new File("d:\\");String fileName = "2.txt";File file = new File(parentFile, fileName);3.父目录+子路径构建String parentPath = "d:\\";String fileName = "3.txt";File file = new File(parentPath, fileName);try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}

File的基本方法

 		File file = new File("d:\\2.txt");file.getName();//获取文件名file.getAbsolutePath();//文件绝对路径file.getParent();//得到文件的父级目录file.length();//文件大小 字节(utf-8 汉字3个字节)file.exists();//文件是否存在file.isDirectory();//是否是目录file.isFile();//是否是文件file.mkdir();//创建目录file.mkdirs();//创建多级目录file.delete();//删除文件、空目录

I/O

在这里插入图片描述
字节流:二进制文件
字符流:文本文件
都是抽象类,使用的时候都要创建子类使用

在这里插入图片描述
在这里插入图片描述

字节流

在这里插入图片描述

FileInputStream 文件输入流

一个字节读取

	public static void main(String[] args) {String path = "d:\\2.txt";//hello worldint data;FileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream(path);while ((data=fileInputStream.read())!= -1){ //读取一个字节  遇到汉字乱码System.out.print((char)(data));}} catch (IOException e) {e.printStackTrace();}finally {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}

多个字节读取

public static void main(String[] args) {String path = "d:\\2.txt";//hello worldbyte[] data = new byte[8];int readLen =0;FileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream(path);while ((readLen = fileInputStream.read(data))!= -1){ //读取正常 返回实际读取的字节数System.out.println(new String(data,0,readLen));}} catch (IOException e) {e.printStackTrace();}finally {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}

FileOutputStream 文件输出流

文件不存在的话会创建,write会覆盖前面的内容,使用new FileOutputStream(filePath,true);创建则会追加

@Testpublic void writeFile(){FileOutputStream fileOutputStream = null;String filePath = "d:\\hello.txt";try {fileOutputStream = new FileOutputStream(filePath);
//            fileOutputStream.write('H');String s = "hello,world"; //String.getBytes
//            fileOutputStream.write(s.getBytes(StandardCharsets.UTF_8));fileOutputStream.write(s.getBytes(),0,s.length());}  catch (IOException e) {e.printStackTrace();} finally {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}

文件拷贝(File)

 @Testpublic void copyFile(){String srcPath = "d:\\胡歌.jpeg";String descPath = "e:\\1.jpeg";FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try {fileInputStream = new FileInputStream(srcPath);fileOutputStream = new FileOutputStream(descPath);byte[] buffer = new byte[1024];int readLen = 0;while ((readLen = fileInputStream.read(buffer)) != -1){fileOutputStream.write(buffer,0,readLen);}} catch (IOException e) {e.printStackTrace();}finally {try {if(fileInputStream != null){fileInputStream.close();}if(fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

字符流

在这里插入图片描述

FileReader

使用单个字符读取文件

public void fileReader(){FileReader fileReader = null;int data =0;try {fileReader = new FileReader("d:\\2.txt");while ( (data = fileReader.read()) != -1){System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}finally {try {if(fileReader != null){fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}

字符数组读取文件

public void fileReader(){FileReader fileReader = null;int dataLen =0;char[] buff = new char[8];try {fileReader = new FileReader("d:\\2.txt");while ( (dataLen = fileReader.read(buff)) != -1){System.out.print(new String(buff,0,dataLen));}} catch (IOException e) {e.printStackTrace();}finally {try {if(fileReader != null){fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}

FileWriter

使用FileWriter 一定要close 或者 flush 方法 否则数据写不进去
writeBytes();

  public static void main(String[] args) {String path = "d:\\hello.txt";char[] chars = {'a','b','c'};FileWriter fileWriter = null;try {fileWriter = new FileWriter(path,true);fileWriter.write('h');//写入单个字符fileWriter.write(chars);//写数组fileWriter.write("往者不可谏".toCharArray(),0,2);//写入数组指定部分fileWriter.write("来者犹可追");//写入字符串fileWriter.write("今天你好",0,2);//指定字符串} catch (IOException e) {e.printStackTrace();}finally {try {fileWriter.close();
//                fileWriter.flush();} catch (IOException e) {e.printStackTrace();}}}

节点流和处理流

1.节点流可以从一个特定的数据源读写数据,如FileReader 、FileWriter
2.处理流(也叫包装流)是连接在已存在的流(节点流或者处理流)之上为程序提供更为强大的读写功能,如BufferedReader bufferedWriter
(bufferedReader类中有属性Reader,可以封装一个节点流,只要是Reader的子类就可以)

节点流和处理流的区别

1.节点流是底层流/低级流,直接跟数据源连接
2.处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
3.处理流对节点流进行包装,使用修饰器设计模式 不会直接与数据源相连

处理流的功能主要体现在以下两个方面:
1.性能的提高:主要增加缓冲的方式来提高输入输出的效率。
2.操作的便捷:处理流可以提供一系列的便捷方法来一次输入输出大批量的数据,使用更加灵活方便。

关闭只需要关闭外层流 bufferedReader.close();

 public void close() throws IOException {synchronized (lock) {if (in == null)return;try {in.close(); //Reader} finally {in = null;cb = null;}}}

模拟修饰器设计模式

父类 Reader_

public abstract class Reader_ {
//     abstract void readFile(); //如果写的是抽象方法,则子类要实现全部的抽象方法
//     abstract void readString();void readFile(){ //子类重写父类的方法System.out.println("read_file");};void readString(){System.out.println("read_string");};
}public class FileReader_ extends Reader_ {public void readFile(){System.out.println("readFile");}
}public class StringReader_ extends Reader_ {public void readString(){System.out.println("readString");}
}public class BufferedReader_ extends Reader_ {private Reader_ reader_;public BufferedReader_(Reader_ reader_) { //调用子类的this.reader_ = reader_;}public void readFiles(){this.reader_.readFile();}public void readStrings(){this.reader_.readString();}
}public class Test {public static void main(String[] args) {BufferedReader_ bufferedReader_ = new BufferedReader_(new FileReader_());bufferedReader_.readFiles(); //readFilebufferedReader_.readFile(); //read_fileBufferedReader_ bufferedReader_1 = new 	BufferedReader_(new StringReader_());bufferedReader_1.readStrings();//readStringbufferedReader_1.readString();//read_string}
}

bufferedReader

@Testpublic void bufferedReader_(){BufferedReader bufferedReader = null;String path = "d:\\2.txt";try {bufferedReader = new BufferedReader(new FileReader(path));String line;//按行读取while( (line = bufferedReader.readLine()) != null){System.out.println(line);}} catch (IOException e) {e.printStackTrace();}finally {try {if(bufferedReader != null){bufferedReader.close();}} catch (IOException e) {e.printStackTrace();}}}

bufferedWriter

public void bufferedWriter_(){String path = "d:\\3.txt";BufferedWriter bufferedWriter = null;try {bufferedWriter =new BufferedWriter(new FileWriter(path,true));//追加方式 在节点流加truebufferedWriter.write("时间就像火车一样,飞速驶离,但我却象在车厢内熟睡的乘客般毫无知觉。一旦醒来,已经错过很多的东西,甚至错过停靠的站。");bufferedWriter.newLine();//插入和系统相关的换行bufferedWriter.write("在不了解一个人之前,不要轻易下结论,在了解一个人之后,也不要轻易下结论。人这么复杂,岂是你一句结论就能概全的?");} catch (IOException e) {e.printStackTrace();}finally {try {if(bufferedWriter != null){bufferedWriter.close();}} catch (IOException e) {e.printStackTrace();}}}

处理流拷贝(bufferedReader bufferedWriter)

 @Testpublic void bufferedCopy(){String srcPath ="d:\\2.txt";String descPath = "d:\\4.txt";BufferedReader bufferedReader = null;BufferedWriter bufferedWriter = null;try {bufferedReader = new BufferedReader(new FileReader(srcPath));bufferedWriter = new BufferedWriter(new FileWriter(descPath));String line;while ((line = bufferedReader.readLine()) != null){bufferedWriter.write(line);bufferedWriter.newLine();//得加上换行符 要不然格式会乱}} catch (IOException e) {e.printStackTrace();}finally {try {if(bufferedReader != null) {bufferedReader.close();}if(bufferedWriter != null) {bufferedWriter.close();}} catch (IOException e) {e.printStackTrace();}}}

bufferedInputStream

在这里插入图片描述
父类
在这里插入图片描述

bufferedOutputStream

在这里插入图片描述

处理流拷贝(bufferedInputStream bufferedOutputStream)

   @Testpublic void bufferedCopy2(){String srcPath ="d:\\5.doc";String descPath = "d:\\6.doc";BufferedInputStream  bufferedInputStream = null;BufferedOutputStream bufferedOutputStream = null;byte[] data = new byte[1024];int len;try {bufferedInputStream = new BufferedInputStream(new FileInputStream(srcPath));bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(descPath));while ((len = bufferedInputStream.read(data)) != -1){bufferedOutputStream.write(data,0,len);}} catch (IOException e) {e.printStackTrace();}finally {try {if(bufferedInputStream != null) {bufferedInputStream.close();}if(bufferedOutputStream != null) {bufferedOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

对象处理流

序列化和反序列化
序列化:保存数据的时候保存数据的值和数据类型。
反序列化:恢复数据的时候恢复数据的值和数据类型。

对象要能序列化 要实现 Serializable Externalizable中的一个,建议Serializable

ObjectOutputStream

public static void main(String[] args) {//序列化的格式不是纯文本的 按照他的格式保存的String path = "d:\\1.bat";ObjectOutputStream objectOutputStream = null;try {objectOutputStream = new ObjectOutputStream(new FileOutputStream(path));objectOutputStream.writeInt(100);//int --IntegerobjectOutputStream.writeBoolean(true);objectOutputStream.writeChar('h');objectOutputStream.writeDouble(1.1);objectOutputStream.writeUTF("没有人是生来就无情的,都是经历并看到了太多自己不想看到的,而最终选择了关上自己的某扇门。");objectOutputStream.writeObject(new A(1));} catch (IOException e) {e.printStackTrace();}finally {try {if(objectOutputStream != null) {objectOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}
class A implements Serializable {private int n;public A(int n) {this.n = n;}
}

ObjectInputStream

@Testpublic void readObject(){String path = "d:\\1.bat";ObjectInputStream objectInputStream = null;try {objectInputStream = new ObjectInputStream(new FileInputStream(path));//防范序列化的顺序得和序列化顺序一致System.out.println(objectInputStream.readInt());System.out.println(objectInputStream.readBoolean());System.out.println(objectInputStream.readChar());System.out.println(objectInputStream.readDouble());System.out.println(objectInputStream.readUTF());System.out.println(objectInputStream.readObject().getClass());//Object-->A (class的位置得一致)} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally {try {if (objectInputStream != null) {objectInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

注意事项

在这里插入图片描述

标准输入输出流

System.in

 public final static InputStream in = null;

编译类型 InputStream
运行类型 BufferedInputStream

System.out

public final static PrintStream out = null;

编译类型 PrintStream
运行类型 PrintStream

转换流(乱码问题)字节流–>字符流

inputStreamReader

在这里插入图片描述

中文乱码问题

默认文件是UTF-8 如果是其他格式 用fileReader 会乱码 所以FileInputStream–>inputStreamReader 字节–>字符

   public void code(){String path = "d:\\7.txt"; //默认文件是UTF-8 如果不是用fileReader 会乱码 所以FileInputStream-->inputStreamReader 字节-->字符BufferedReader bufferedReader = null;String readLine;try {InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path),"gbk");bufferedReader = new BufferedReader(inputStreamReader);while( (readLine = bufferedReader.readLine())!=null){System.out.println(readLine);}} catch (IOException e) {e.printStackTrace();}finally {try {if(bufferedReader != null) {bufferedReader.close();}} catch (IOException e) {e.printStackTrace();}}}

outputStreamWriter

在这里插入图片描述
默认writer保存文件utf8 可以使用字节流 指定格式 转换为字符流

@Testpublic void code2(){String path = "d:\\8.txt";OutputStreamWriter outputStreamWriter = null;try {outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path),"gbk");//utf8  utf-8outputStreamWriter.write("人应该支配习惯,而决不能让习惯支配人;一个人不能去掉他的坏习惯,那简直一文不值。");} catch (IOException e) {e.printStackTrace();}finally {try {if (outputStreamWriter != null) {outputStreamWriter.close();}} catch (IOException e) {e.printStackTrace();}}}

字节打印流 PrintStream

@Testpublic void printf() throws IOException{PrintStream printStream = System.out;printStream.print("hello");printStream.write("world".getBytes());printStream.close();//        System.setOut(new PrintStream(""));//可以修改打印输出的位置}

字符打印流 PrintWriter

//        PrintWriter printWriter = new PrintWriter(System.out);PrintWriter printWriter = new PrintWriter("d:\\9.txt");printWriter.write("haha");printWriter.close();

properties

在这里插入图片描述

@Testpublic void readProperties() throws IOException{String readLine ;BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\java_han\\src\\my.properties"));while((readLine =bufferedReader.readLine()) != null){System.out.println(readLine);}bufferedReader.close();}@Testpublic void readProperties02() throws IOException{Properties properties = new Properties();properties.load(new FileReader("E:\\java_han\\src\\my.properties"));//加载properties.list(System.out);System.out.println(properties.get("user"));properties.setProperty("name","tom");//可以增加properties.setProperty("user","jack"); //可以修改
//        properties.store();  保存properties.list(System.out);}

http://chatgpt.dhexx.cn/article/wBybm7Hx.shtml

相关文章

Java文件操作(超详细+代码示例)

Java文件操作 一、Java.io包1.1 File类1.2 Stream流(字节流)1.2.1 使用FileInputStream类1.2.2 使用FileOutputStream类1.2.3 小总结 1.3 Stream流(字符流)1.3.1 FileWriter类 与 BufferedWriter类使用1.3.2 FileReader类 与 Buff…

二、八大数据类型

在Java中有八种基本数据类型来存储数值、字符和布尔值: 2.1 整数型 整数型有byte(字节)、short(短整型)、int(整型)、long(长整型)四种。(说明:可使用L或l后缀来声明长整型数值) 以0开始的数值被解释为8进制数值;以…

Java 八大基本数据类型简述

java 的基本数据类型关系图 1、取值范围 类型默认值占用存储空间/字节范围byte01-127~128(-2的7次方到2的7次方-1)short02-32768~32767(-2的15次方到2的15次方-1)int04-2147483648~2147483647(-2的31次方到2的31次方-1)long08-9223372036854774808~9223372036854774807(-2的63次…

Java基础(一) 八大基本数据类型

自从Java发布以来,基本数据类型就是Java语言的一部分,分别是***byte, short, int, long, char, float, double, boolean***. 其中: 整型:byte, short, int, long 字符型:char 浮点型:float, double 布…

Java 中的八大基本数据类型、类型转换

目录 1. ♥常见的数据类型 2. ♥引用数据类型 3. ♥类型转换 4. ♥数值提升 5. ♥int 和 String 之间的相互转换 1. 基本数据类型 八大基本数据类型: 整型:byte、short、int、long浮点型:double(双精度浮点型)、…

Java基础:Java八大基本数据类型

一、背景。 这篇文章主要介绍了Java八大数据类型详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想巩固巩固自己的基础知识。J…

Java八大基本数据类型

前言:做一下笔记。 1.Java基本数据类型图 2.Java基本数据类型 整数类型:byte,1字节,8位,最大存储数据量是255,存放的数据范围是-128~127之间。整数类型:short,2字节,16…

好用网站推荐

说明 整理一下常用的网站,其中包括学习、素材、教学视频、一些优秀的论坛等网站,并推荐给大家大家按需获取 首先推荐一些非常好的网站,网站百度就能搜到:知乎,轻单,果壳,花瓣,电子发…

c++好用的网站

目录 洛谷www.luogu.com.cn 有道小图灵https://oj.youdao.com/csp 维基https://oi-wiki.org/ 信奥赛一本通http://ybt.ssoier.cn:8088/index.php 1,洛谷 他的网址是www.luogu.com.cn。 这是一个好用的刷题网站,题库里有大约有2000多道题。 洛谷有题…

有哪些好用的搜索引擎网站推荐?

分享一些私藏已久的搜索引擎,个个都十分强大,一起来看看吧! 01.秘迹搜索 这是一款无敌有良心、无敌安全的搜索引擎,不会收集私人信息,保护私隐,没有Cookie,并且秘迹搜索聚合了百度、360、Bing…

分享一些冷门好用的网站和软件

分享一:UZER UZER是一个功能强大的云端应用空间,可以帮助您将所有的文件和应用程序都集中在一个地方,让您随时随地轻松访问。 以下是它的主要特点: 云存储:UZER提供大量的云存储空间,让您可以安全地存储…

网站分享:7个非常好用的电子书网站

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、 C#、 Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&…

推荐几个好用的网站导航

1、爱达杂货铺 里面包含很多网站的导航,是我感觉我用过最好的导航网站了(里面的网站有些是访问不了的) 2、不求人影视导航 该网站里面有各种影视网站的地址集合,还有动漫、美剧。。。。。 3、龙轩导航 界面简洁,集合…

收藏的一些好用的网站

一、PPT模板 网址:https://pptmon.com/ PPTMON - Free PowerPoint Templates and Google Slides Themes 是一个提供 PowerPoint 模板和图标素材下载的网站。该网站上有大量的 PowerPoint 模板,可供用户根据自己的需要进行选择和下载。此外,该…

别找了!前端那些好用的网站都在这里了!【文末送书】

🍀前言 好用的网站千千万万,如果你还发现好用的网站,欢迎在评论区中留言分享😁,赠书活动在文末哟,中奖者可以从给出的五本书中任意挑选自己喜欢的那本 文章目录 🍀前言 🍀一、渐变…

值得推荐好用的网址导航网站大全

一个好用的网址导航网站,可以帮助我们快速发现找到一些优质的网站。小编就和大家分享几个值得推荐的网站导航网。 1.办公人导航 办公人导航是一个特别适合职场办公人使用的网址导航网站,收录了办公人常用的在线工具,软件下载,ppt…

推荐几个很好很好用的网站

1. MSDN 这是非官方性质的微软网站,但是它无广告,提供了很多的微软资源,却是相当的良心。如果要安装操作系统、office、VS、Visio等都可以从这个网站上进行下载。 2. 高清图片 该网站提供很多高清壁纸,风格清新,艺术风…

这些好用的网站,你千万别错过

目录 一、网站导航 二、在线代码截图 三、 图片无损压缩 四、图片无损放大 五、 临时邮箱 六、长链接转短链接 七、免费在线作图 八、在线PS 九、pdf文档操作 十、在线代码运行工具 十一、免费在线压缩 十二、在线视频剪辑 十三、在线音频剪辑 一、网站导航 国外网址&#xff…

强烈推荐非常好用的网站

常用网站推荐 学习算法 网址:[算法学习]:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 目前,有以下数据结构和算法的可视化效果: 基本知识递归索引排序堆的数据结构图算法动态规划几何算法 在线画图 网址:[画图]: h…

这几款好用冷门的网站推荐给你

网站一:adobeedu导航 adobeedu导航是一个设计师必备的网站,它提供了大量的设计工具、素材和教程资源,帮助用户快速学习和提升设计技能。以下是该网站的主要特点: 工具:adobeedu导航提供了大量的设计工具,…