File和IO流

1. File类常用方法

1.1  获取基本属性

• public String getName() :获取名称 
• public String getPath() :获取路径 
• public String getAbsolutePath():获取绝对路径 
• public File getAbsoluteFile():获取绝对路径表示的文件 
• public String getParent():获取上层文件目录路径。若无,返回 null 
• public long length() :获取文件长度(即:字节数)。不能获取目录的长度。 
• public long lastModified() :获取最后一次的修改时间,毫秒值 

1.2 列出目录的下一级

• public String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目录。  
• public File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目录。 

1.3 重命名

• public boolean renameTo(File dest):把文件重命名为指定的文件路径。 
调用该方法的文件必须存在,dest必须不存在,但dest所在目录必须存在,才能成功重命名

1.4 功能判断

• public boolean exists() :此 File 表示的文件或目录是否实际存在。 
• public boolean isDirectory() :此 File 表示的是否为目录。 
• public boolean isFile() :此 File 表示的是否为文件。 
• public boolean canRead() :判断是否可读 
• public boolean canWrite() :判断是否可写 
• public boolean isHidden() :判断是否隐藏 

1.5 创建和删除

• public boolean createNewFile() :创建文件。若文件存在,则不创建,返回 false。 
• public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。 
• public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建。 
• public boolean delete() :删除文件或者文件夹 删除注意事项:① Java 中的删除不走回收站。② 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。 

2. IO流原理及分类

2.1 Java IO原理

        Java 程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行,可以看做是 一种数据的流动。

        I/O 流中的 I/O 是 Input/Output 的缩写, I/O 技术是非常实用的技术,用于处理设 备之间的数据传输。如读/写文件,网络通讯等。

        – 输入 input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

        – 输出 output:将程序(内存)数据输出到磁盘、光盘等存储设备中。

2.2 流的分类

        java.io 包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准 的方法输入或输出数据。

按数据的流向不同分为:输入流和输出流。

        – 输入流 :把数据从其他设备上读取到内存中的流。

                        • 以 InputStream、Reader 结尾

        – 输出流 :把数据从内存 中写出到其他设备上的流。

                        • 以 OutputStream、Writer 结尾

按操作数据单位的不同分为:字节流(8bit)和字符流(16bit)。

        – 字节流 :以字节为单位,读写数据的流。

                        • 以 InputStream、OutputStream 结尾

        – 字符流 :以字符为单位,读写数据的流。

                        • 以 Reader、Writer 结尾

根据 IO 流的角色不同分为:节点流和处理流。

        – 节点流:直接从数据源或目的地读写数据

        – 处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之                               上,通过对数据的处理为程序提供更为强大的读写功能。

2.3 流的API

        Java 的 IO 流共涉及 40 多个类,实际上非常规则,都是从如下 4 个抽象基类派生的。

(抽象基类)输入流输出流
字节流InputStreamOutputStream
字符流ReaderWriter

        由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。

3. FileReader / FileWriter

3.1 读文件

/*** 读hello.txt*/public static void F_Read() {String pathName = "demo\\src\\main\\java\\com\\example\\file_IO\\hello.txt";FileReader fr = null;// 1. 创建File对象File file = new File(pathName);try {// 2. 创建输入型的字符流,用于读取数据fr = new FileReader(file);// 3. 读取数据// // 逐字符读取// int date;// date = fr.read();// while (date != -1) {            // 将Hello,world!逐字符输出//     System.out.println((char)date);//     date = fr.read();// }// 以数组批量读取/** Hello5* , wor5* ld!3*/char[] cbuffer = new char[5];int len = fr.read(cbuffer);while (len != -1) {for (int i = 0; i < len; i++) {System.out.print(cbuffer[i]);}System.out.println(len);len = fr.read(cbuffer);  }} catch (IOException e) {e.printStackTrace();} finally {// 4. 关闭流try {if (fr != null)  fr.close();} catch (IOException e) {e.printStackTrace();}}}

 

3.2 写文件

    /*** 写test1.txt* @throws IOException*/public static void F_Write() throws IOException {String pathName = "demo\\src\\main\\java\\com\\example\\file_IO\\test1.txt";// 1. 创建File对象,指明写出文件名称File file = new File(pathName);// 2. 创建输出流FileWriter fw = new FileWriter(file);  // 覆盖文件// FileWriter fw = new FileWriter(file, true);  // 在原有文件添加内容// 3. 写数据fw.write("写操作1");fw.write("wwww");// 4. 关闭流fw.close();}

 

3.3 简单使用

/*** 将hello.txt复制到test2.txt*/public static void F_Copy() {File src = new File("demo\\src\\main\\java\\com\\example\\file_IO\\hello.txt");File dest = new File("demo\\src\\main\\java\\com\\example\\file_IO\\test2.txt");FileReader fr = null;FileWriter fw = null;try {fr = new FileReader(src);fw = new FileWriter(dest);char[] cbuffer = new char[5];int len;while ((len = fr.read(cbuffer)) != -1) {fw.write(cbuffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fr != null) fr.close();if (fw != null) {fw.close();}} catch (IOException e) {e.printStackTrace();}}  }

 

 

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

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

相关文章

linux:线程同步

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言线程同步条件变量接口简单示例pthread_cond_wait为什么要有mutex伪唤醒问题的解决 (if->while) 总结 前言 本文作为我对于线程同步知识总结 线程同步 同步&…

让机器理解语言,从字词开始,逐步发展到句子和文档理解:独热编码、word2vec、词义搜索、句意表示、暴力加算力

让机器理解语言&#xff0c;从字词开始&#xff0c;逐步发展到句子和文档理解&#xff1a;独热编码、词嵌入、word2vec、词义搜索、句意表示、暴力加算力 独热编码&#xff1a;分类 二进制特征Word2Vec 词嵌入&#xff1a; 用低维表示 用嵌入学习 用上下文信息Skip-gram 跳字…

Web Components初探

组件化&#xff0c;标签语义化&#xff0c;是前端发展的趋势。现在流行的组件化框架有React、Vue等&#xff0c;标签语义化在H5中添加的article、dialog等。 Web Components 就是类似的一套技术&#xff0c;允许您创建可重用的定制元素&#xff0c;并且在您的web应用中使用它们…

网约车APP小程序源码代驾顺风拼车货运司乘端安卓苹果源码可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的&#xff0c;全开源未加密&#xff0c;这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍&#xff1a; 车主实名认证&#xff0c;驾驶证认证&#xff0c;车…

【C++】快速判断元音字母,让代码不在繁琐!!

目录 一、前言 二、判断字符是否为元音字母 ✨ 繁琐的方法 ✨ 神奇又快速的方法 三、常考面试题 四、共勉 一、前言 大家有没有发现&#xff0c;我们在做算法题的时候&#xff0c;经常会碰到让我们判断一个字母是否为 元音字母&#xff0c;可是用通常的 if 条件判断 要繁…

centos7 装 docker-ce

安装必要的系统工具&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 命令会以超级用户的身份安装三个软件包&#xff1a;yum-utils&#xff0c;device-mapper-persistent-…

Linux线程互斥

1.用线程封装代码测试通过现象引出线程互斥 1.1代码测试 Thread.hpp #pragma once #include<iostream> #include<string> #include<functional> #include<pthread.h> template<class T> using func_t std::function<void(T)>;template…

为什么Python不适合写游戏?

知乎上有热门个问题&#xff1a;Python 能写游戏吗&#xff1f;有没有什么开源项目&#xff1f; Python可以开发游戏&#xff0c;但不是好的选择 Python作为脚本语言&#xff0c;一般很少用来开发游戏&#xff0c;但也有不少大型游戏有Python的身影&#xff0c;比如&#xff1…

【Linux】详解进程程序替换

一、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支)&#xff0c;子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时&#xff0c;该进程的用户空间代码和数据完全被新程序替换&#xff0c;从新程序的启动例程开始执…

Mysql数据库——高级SQL语句补充

目录 一、子查询——Subquery 1.环境准备 2.In——查询已知的值的数据记录 2.1子查询——Insert 2.2子查询——Update 2.3子查询——Delete 3.Not In——表示否定&#xff0c;不在子查询的结果集里 3.Exists——判断查询结果集是否为空 4.子查询——别名 二、视图—…

PointNet++点云处理原理

PointNet点云处理原理 借鉴了多层神经网络的思想 pointnet要么是一个点&#xff0c;要么是所有点进行操作&#xff0c;就不会有局部上下文信息 pointnet基本思想是迭代地应用到局部区域 1.多级别特征学习 2.旋转不变性 3.置换不变性 选取中心点centroid&#xff0c;通过poi…

jconsole jvisualvm

jconsole 打开方式 命令行输入 jconsole双击想要连接的应用 界面展示 jvisualvm 打开方式 命令行输入 jvisualvm双击想要连接的应用 可以安装插件&#xff0c;比如 Visual GC 直观看到 GC 过程

在CentOS7上部署Nginx并测试指南

Nginx部署测试 Nginx简介 Nginx是俄罗斯人Igor Sysoev编写的一款高性能的HTTP和反向代理服务器。 Nginx选择了epoll和kqueue作为网络I/O模型&#xff0c;在高连接并发的情况下&#xff0c;内存、CPU等系统资源消耗非常低&#xff0c;运行稳定。 正向代理与反向代理 正向代…

Java学习记录第十三天

面向对象编程 核心思想就是OOP&#xff08;面向对象编程&#xff09; 面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么... 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚&#xff0c;分类的思维模式&…

电源噪声的起因及危害

对造成电源不稳定的根源进行简单分析如下,主要在于两个方面:一是器件高速开关状态下,瞬态的交变电流过大;二是电流回路上存在的电感。从表现形式上来看又可以分为三类:同步开关噪声(SSN),有时被称为Δi噪声,地弹(Ground bounce)现象也可归于此类(图1-a);非理想电…

2024.3.21 QT

QT登录界面设计&#xff1a; //头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nu…

Linux manim安装

简介 根据文档可知, manim目前分为两个版本, 一个是由3Blue1Brown维护更新的最新版本的manimgl, 另一个是稳定的社区版本manim or manimce. 两个版本在安装和使用上都有些不同, 不要搞混. Linux manim ERROR No package ‘pangocairo’ found Getting requirements to buil…

C++进阶之路---C++11新特性 | lambda表达式

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 前言&#xff1a;简介lambda 在C中&#xff0c;lambda表达式是一种匿名函数的方式&#xff0c;它可以用来解决以下问题&a…

稀碎从零算法笔记Day26-LeetCode:跳跃游戏

断更多天&#xff0c;懒狗ex 题型&#xff1a;数组、模拟、类似双指针&#xff1f; 链接&#xff1a;55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组…

【Diffusers库】第四篇 训练一个扩散模型(Unconditional)

目录 写在前面的话下载数据模型配置文件加载数据创建一个UNet2DModel创建一个调度器训练模型完整版代码&#xff1a; 写在前面的话 这是我们研发的用于 消费决策的AI助理 &#xff0c;我们会持续优化&#xff0c;欢迎体验与反馈。微信扫描二维码&#xff0c;添加即可。   官方…