JavaSE17-File&递归&字节流
1.File类
1.1 File类概述和构造方法
File类介绍
它是文件和目录路径名的抽象表示
文件和目录是可以通过File封装成对象的
对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以 是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
File类构造方法
| 方法名 | 说明 | 
| File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 | 
| File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 | 
| File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 | 
1.2 File类创建功能
| 方法名 | 说明 | 
| public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 | 
| public boolean mkdir() | 创建由此抽象路径名命名的目录 | 
| public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 | 
1.3 File类判断和获取功能
判断功能
| 方法名 | 说明 | 
| public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 | 
| public boolean isFile() | 测试此抽象路径名表示的File是否为文件 | 
| public boolean exists() | 测试此抽象路径名表示的File是否存在 | 
获取功能
| 方法名 | 说明 | 
| public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 | 
| public String getPath() | 将此抽象路径名转换为路径名字符串 | 
| public String getName() | 返回由此抽象路径名表示的文件或目录的名称 | 
| public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 | 
| public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 | 
1.4 File类删除功能
| 方法名 | 说明 | 
| public boolean delete() | 删除由此抽象路径名表示的文件或目录 | 
绝对路径和相对路径的区别
绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\IT\java.txt
相对路径:必须使用取自其他路径名的信息进行解释。例如:myFile\java.txt
2.递归
2.1 递归
递归的介绍
以编程的角度来看,递归指的是方法定义中调用方法本身的现象
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
递归的注意事项
递归一定要有出口。否则内存溢出 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出
2.2 递归遍历目录
1 import java.io.File;
2
3 public class FileTraversal {
4 public static void main(String[] args) {
5 File srcFile = new File("F:\\");
6
7 getFilePath(srcFile);
8 }
9
10 private static void getFilePath(File srcFile) {
11 File[] fileArray = srcFile.listFiles();
12 if (fileArray != null){
13 for (File file : fileArray){
14 if (file.isDirectory()){
15 getFilePath(file);
16 }else{
17 System.out.println(file.getAbsolutePath());
18 }
19 }
20 }
21 }
22 }
3.IO流
3.1 IO流概述和分类
IO流介绍
IO:输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载
IO流的分类
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型来分
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
IO流的使用场景
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片、视频、音频等二进制文件。优先使用字节流
如果不确定文件类型,优先使用字节流。字节流是万能的流
3.2 字节流写数据
字节流抽象基类
InputStream:这个抽象类是表示字节输入流的所有类的超类
OutputStream:这个抽象类是表示字节输出流的所有类的超类
子类名特点:子类名称都是以其父类名作为子类名的后缀
字节输出流
FileOutputStream(String name):创建文件输出流以指定的名称写入文件
使用字节输出流写数据的步骤
创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
调用字节输出流对象的写数据方法
释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
3.3 字节流写数据的三种方式
| 方法名 | 说明 | 
| void write(int b) | 将指定的字节写入此文件输出流 一次写一个字节数据 | 
| void write(byte[] b) | 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据 | 
| void write(byte[] b, int off, int len) | 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一 次写一个字节数组的部分数据 | 
3.4 字节流写数据的两个小问题
字节流写数据如何实现换行
windows:\r\n
linux:\n
mac:\r
字节流写数据如何实现追加写入
public FileOutputStream(String name,boolean append)
创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
3.5 字节流写数据加异常处理
1 try{
2   可能出现异常的代码;
3 }catch(异常类名 变量名){
4   异常的处理代码;
5 }finally{
6   执行所有清除操作;
7 }
finally特点
被finally控制的语句一定会执行,除非JVM退出
3.6 字节流读数据
字节输入流
FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文 件系统中的路径名name命名
字节输入流读取数据的步骤
创建字节输入流对象
调用字节输入流对象的读数据方法
释放资源
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.IOException;
4
5 public class FileInBuffer {
6 public static void main(String[] args) throws IOException {
7 File srcFile = new File("F:\\Fis.txt");
8 FileInputStream fis = new FileInputStream(srcFile);
9
10 byte[] Buffer = new byte[4096];
11
12 int by;
13
14 while ((by = fis.read(Buffer)) != -1) {
15 System.out.println(new String(Buffer, 0, by));
16 }
17 fis.close();
18 }
19 }
3.7 字节流复制图片
实现步骤
根据数据源创建字节输入流对象
根据目的地创建字节输出流对象
读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
释放资源
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5
6 public class FileInBuffer {
7 public static void main(String[] args) throws IOException {
8 File srcFile = new File("F:\\加藤惠.png");
9 File destFile = new File("E:\\加藤惠(复制品).png");
10 FileInputStream fis = new FileInputStream(srcFile);
11 FileOutputStream fos = new FileOutputStream(destFile);
12
13 byte[] Buffer = new byte[4096];
14
15 int by;
16
17 while ((by = fis.read(Buffer)) != -1) {
18 fos.write(Buffer,0,by);
19 }
20
21 fis.close();
22 fos.close();
23 }
24 }
JavaSE17-File&递归&字节流的更多相关文章
- java基础 File 递归删除文件夹中所有文件文件夹  目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
		File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ... 
- io.File+递归
		import java.io.File ; import java.io.IOException ; public class FileDemo11{ public static void main( ... 
- day21<IO流+&FIle递归>
		IO流(字符流FileReader) IO流(字符流FileWriter) IO流(字符流的拷贝) IO流(什么情况下使用字符流) IO流(字符流是否可以拷贝非纯文本的文件) IO流(自定义字符数组的 ... 
- java:IO流(File,字节流/输入输出流(InputStream(FileInputStream),OutputStream(FileOutStream)),字符流(Reader,Writer))
		File: * java.io.File类:代表一个文件或目录. * 常用的构造方法: * File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 ... 
- java IO之 File类+字节流      (输入输出 缓冲流 异常处理)
		1. File类 
- IO流-File,字节流,缓冲流
		1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ... 
- java File获取字节流
		/*文件64位编码*/ public static void main(String[] args) { byte[] fileByte = toByteArray(newFile); String ... 
- IO流----File,递归,字节流,字符流
		要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘.光盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读 ... 
- 递归、字节流、文件复制_DAY20
		1:递归(理解) (1)方法定义中调用方法本身的现象. (2)递归注意事项: A:要有出口,否则就是死递归. B:次数不能太多,否则内存溢出. 特殊事项:构造方法不能递归定义. 例子:cn.itcas ... 
随机推荐
- 讲武德,你们要的高性能日志工具 Log4j2,来了
			Log4j 介绍过了,SLF4J 介绍过了,Logback 也介绍过了,你以为日志系列的文章就到此终结了? 不不不,我告诉你,还有一个 Log4j 2,顾名思义,它就是 Log4j 的升级版,就好像手 ... 
- php include文件包含
			XCTF题目:Web_php_include <?php show_source(__FILE__);//高亮显示源文件 echo $_GET['hello']; $page=$_GET['pa ... 
- OAuth 2.0授权框架详解
			目录 简介 OAuth的构成 refresh Token Authorization Code模式 隐式授权 Resource Owner 授权密码认证 Client 认证授权 github的OAut ... 
- 计算机&编程语言发展史
			计算机&编程语言发展史 编辑于2020-11-18 计算机的基本组成 计算机的发展经历了哪几代? 第一代 电子管计算机 第二代 晶体管计算机 第三代 集成电路计算机 第四代 大规模和超大规模集 ... 
- Android呼吸灯添加
			平台:mtk 一.hal层入口 Lights.c (vendor\mediatek\proprietary\hardware\liblights) char const*const RE ... 
- window安装elasticsearch和kibana
			本次测试安装5.1.1版本 es下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-5-1-1 选择zip kibana ... 
- kafka入门之broker-集群管理
			依赖于zookeeper,broker向zk中注册的信息以json格式保存,其中包括: 1.listener_security_protocol_map:此值指定了该broker与外界通信所用的安全协 ... 
- web自动化-绕过登录
			两个方法: 1.常用的方法: 第一种方法是登录后查看网站的 cookie,请求 url 的时候把 cookie 带上(缺点是:cookie有时间限制.优点:简单,方便) 2.添加cookies的方式: ... 
- UML第二次作业(代码互评)
			博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE2/ 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018S ... 
- JZOJ 2020.10.6 提高B组反思
			JZOJ 2020.10.6 提高B组反思 T1 NYG的动态数点 最简单的一题 很容易想到\(O(n)\)的做法 枚举最小的那个数,即\(a_k\) 然后向左和向右扩展 然后可以直接从右端点+1继续 ... 
