JavaFile、递归、字节流、字符流整理
File
1.1 File类的构造函数
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
package com.oracle.demo01;
import java.io.File;
public class FileDemo01 {
public static void main(String[] args) {
//File : 文件
//directory : 目录(文件夹)
//path :路径
//flie类的构造方法没有检查该路径指定的文件是否存在的功能
File file=new File("E:\\test\\a.txt");
//File类的构造方法没有检测该路径指定的文件是否存在的功能
System.out.println(file.exists());
m1("E:\\test\\", "ee.txt");
m1("E:\\test\\", "ee.txt");
} //父路径 //子路径
public static void m1(String parent,String child){
//缺点:没法调用对象.exists方法
File file=new File(parent,child);
System.out.println(file);
} //传一个对象
public static void m2(File parent,String child){
//判断路径是否存在
parent.exists();
File file=new File(parent,child);
}
}
运行结果:

1.2 File类的获取
package com.oracle.demo01;
import java.io.File;
import java.io.IOException;
public class FileDemo02 {
public static void main(String[] args) throws IOException {
m1();
m2();
m3();
m4();
m5();
m6();
m7();
}
public static void m1() {
// 相对路径:相对本工程的路径
File file = new File("src");
// 获取绝对路径
System.out.println(file.getAbsolutePath());
// 获取文件(夹)名
System.out.println(file.getName());
// 获取该路径的字符串路径
System.out.println(file.getPath());
// 获取该文件(夹)的长度
System.out.println(file.length());
}
// 创建文件
public static void m2() throws IOException {
// 只能 创建文件 不能创 建文件夹
// 不能创建同名文件
File file = new File("E:\\test\\c.txt");
boolean flag = file.createNewFile();
System.out.println("创建文件" + flag);
}
// 创建文件夹
public static void m3() throws IOException {
// 不区分大小写(包括文件和文件夹)
File file = new File("E:\\test\\c\\a\\a");
boolean flag = file.mkdirs();
System.out.println("创建文件夹" + flag);
}
// 删除创建文件或者文件夹
public static void m4() throws IOException {
// 不区分大小写(包括文件和文件夹)
File file = new File("E:\\test\\a.txt");
// 判断该file指定的文件(夹)是否存在
System.out.println("文件(夹)是否存在" + file.exists());
// 判断该file指定的文件(夹)是否是目录
System.out.println("文件(夹)是否是目录" + file.isDirectory());
// 判断该file指定的文件(夹)是否是文件
System.out.println("文件(夹)是否是文件" + file.isFile());
}
// 删除创建文件或者文件夹
public static void m5() throws IOException {
// 不区分大小写(包括文件和文件夹)
File file = new File("E:\\test\\c\\a\\a");
boolean flag = file.delete();
System.out.println("创建文件或者文件夹" + flag);
}
// 获取的是目录下的当前的文件以及文件夹的名称。
public static void m6() throws IOException {
File file = new File("E:\\test");
String [] files=file.list();
for(String f: files ){
System.out.println("获取所有文件和文件夹"+f);
}
}
// 获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
public static void m7() throws IOException {
File file = new File("E:\\test");
File [] files=file.listFiles();
for(File f: files ){
System.out.println(f);
}
}
}
运行结果

1.3 listFiles()方法介绍
// 获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
public static void m7() throws IOException {
File file = new File("E:\\test");
File [] files=file.listFiles();
for(File f: files ){
System.out.println(f);
}
}
运行结果:

注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须是存在的,
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
1.4 文件过滤器
package com.oracle.demo01;
import java.io.File;
import java.io.FileFilter;
public class MyFileFilter implements FileFilter {
/* public boolean accept(File pathname){
// 把对象转换称文件名 将文件名转换称小写字母格式 但后在判断是否是.java后缀的文件
return pathname.getName().toLowerCase().endsWith(".java");
}*/
public boolean accept(File pathname){
return pathname.getName().toLowerCase().endsWith(".txt");
}
}
package com.oracle.demo01;
import java.io.File;
public class File03 {
public static void main(String[] args) {
//获取的是目录下的当前的文件以及文件夹的名称。
File file=new File("E:\\test");
File[] files=file.listFiles(new MyFileFilter());
for(File f : files){
System.out.println(f);
}
}
}
运行结果:

递归
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
package com.oracle.demo01;
import java.util.Scanner;
public class File04 {
/* 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
55, 89, 144, 233,377,610,987,1597,
2584,4181,6765,10946,17711,28657,46368。*/
public static void main(String[] args) {
System.out.println(sum(5));
//System.out.println(fib(20));
}
public static long fib(long num){
if(num==0||num==1){
return 1;
}
return fib(num-1)+fib(num-2);
}
public static int sum(int n){
if(n==1){
return 1;
}
return n+sum(n-1);
}
}
运行结果:

字节流
3.1 字节输出流OutputStream
OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。

输出流中定义都是写write方法

3.1.1 FileOutputStream类

构造方法:

FileOutputStream类写入数据到文件中
package com.oracle.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo01 {
public static void main(String[] args) throws IOException {
//明确目的地
//构造方法在我文件不存在时自动创建
//文件存在则覆盖
FileOutputStream fos=new FileOutputStream("E:\\test\\a.txt");
//像文件中写入一个字节
//fos.write(100);
//想文件中写字节数组
byte[] bytes={-97,-98,-99,-100,-101};
//fos.write(bytes);
//指定位置
fos.write(bytes,0,4);
//释放资源
fos.close();
}
}
给文件中续写和换行:

public class FileOutputStreamDemo2 {
public static void main(String[] args) throws Exception {
File file = new File("c:\\file.txt");
FileOutputStream fos = new FileOutputStream(file, true);
String str = "\r\n" +"aaa";
fos.write(str.getBytes());
fos.close();
}
}
IO异常的处理:
package com.oracle.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args){
FileOutputStream fos=null;
try{
fos=new FileOutputStream("E:\\test\\a.txt",true);
fos.write("嘤嘤嘤".getBytes());
fos.write("\r\n换行".getBytes());
}catch(IOException ex){
ex.printStackTrace();
throw new RuntimeException("文件写入失败");
}finally{
//文件释放
try {
if(fos!=null)
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("关闭流错误!");
}
}
}
}
3.2 字节输入流InputStream
通过InputStream可以实现。InputStream此抽象类,是表示字节输入流的所有类的超类。,定义了字节输入流的基本共性功能方法。

l int read():读取一个字节并返回,没有字节返回-1.
l int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。
InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。
FileInputStream 从文件系统中的某个文件中获得输入字节。

构造方法:

3.2.1 FileInputStream类读取数据read方法
在读取文件中的数据时,调用read方法,实现从文件中读取数据

package com.oracle.output;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo03 {
public static void main(String[] args) throws IOException {
//创建一个字节流对象
FileInputStream fis=new FileInputStream("E:\\test\\a.txt");
//一次读一个字节
int len=0;
while ((len=fis.read())!=-1) {
System.out.print((char)len+" ");
}
//释放资源
fis.close();
}
}
读取数据read(byte[])方法:
在读取文件中的数据时,调用read方法,每次只能读取一个,太麻烦了,于是我们可以定义数组作为临时的存储容器,这时可以调用重载的read方法,一次可以读取多个字符。

package com.oracle.output;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.MissingFormatArgumentException;
public class Demo05 {
public static void main(String[] args) throws IOException {
//明确数据源
FileInputStream fis=new FileInputStream("E:\\test\\a.txt");
//明确目的地
FileOutputStream fos=new FileOutputStream("E:\\test\\e\\eee.txt");
//开始复制
byte[] bytes=new byte[1024]; //长度可以定义成1024的整数倍
int len=0;
while ((len=fis.read(bytes))!=-1) {
fos.write(bytes,0,len);
}
fos.close();
fis.close();
}
}
字符流
4.1 字符输入流Reader
Reader,读取字符流的抽象超类。

l read():读取单个字符并返回
l read(char[]):将数据读取到数组中,并返回读取的个数。
4.1.1 FileReader类
FileReader的API介绍。用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的
l 构造方法

FileReader读取包含中文的文件:
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
//给文件中写中文
writeCNText();
//读取文件中的中文
readCNText();
}
//读取中文
public static void readCNText() throws IOException {
FileReader fr = new FileReader("D:\\test\\cn.txt");
int ch = 0;
while((ch = fr.read())!=-1){
//输出的字符对应的编码值
System.out.println(ch);
//输出字符本身
System.out.println((char)ch);
}
}
//写中文
public static void writeCNText() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");
fos.write("欢迎你".getBytes());
fos.close();
}
}
package com.oracle.reader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo01 {
public static void main(String[] args) throws IOException {
//明确数据源
FileReader fr=new FileReader("E:\\test\\c.txt");
//一个字符一个字符读
int len=0;
/*while ((len=fr.read())!=-1) {
System.out.println((char)len);
}
fr.close();
*/
//一个字符数组一个字符数组的读
char[] ch=new char[1024];
while ((len=fr.read(ch))!=-1) {
System.out.print(new String(ch,0,len));
}
fr.close();
}
}
4.2 字符输出流Writer

package com.oracle.reader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws IOException {
//明确目的地
FileWriter fw=new FileWriter("E:\\test\\b.txt");
fw.write("好吗");
//fw.close();
fw.flush();
//字符数组
char[] ch={'小','猪','佩','奇'};
fw.write(ch);
fw.flush();
fw.close();
}
}
4.2.1 FileWriter类

4.3 flush()和close()的区别?

flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。
4.3.1 FileWriter写入中文到文件中
package com.oracle.reader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws IOException {
//明确目的地
FileWriter fw=new FileWriter("E:\\test\\b.txt");
fw.write("好吗");
//fw.close();
fw.flush();
//字符数组
char[] ch={'小','猪','佩','奇'};
fw.write(ch);
fw.flush();
fw.close();
}
}
运行结果:

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
false
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
JavaFile、递归、字节流、字符流整理的更多相关文章
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- servlet 之 response 回复 字节流 字符流
重定向 设置状态吗为302 添加响应头Location(告诉他重定向到哪里去) //response.setStatus(302); //添加响应头Locatio ...
- Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理
通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter 这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和O ...
- IO 复习字节流字符流拷贝文件
/* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...
- Java之IO流(字节流,字符流)
IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...
- IO—》字节流&字符流
字节流 一.字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法. FileOutputStre ...
- 【C#IO 操作】stream 字节流|字符流 |比特流
stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...
- java 输入输出IO流 字节流| 字符流 的缓冲流:BufferedInputStream;BufferedOutputStream;BufferedReader(Reader in);BufferedWriter(Writer out)
什么是缓冲流: 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. 图解: 1.字节缓冲流BufferedInputStr ...
随机推荐
- Redis事务涉及的watch、multi等命令
Redis Watch 命令 作用: 用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断. 用法: redis 127.0.0.1:6379 ...
- Java 8 新特性7-方法引用、继承
(原) 方法引用: 方法引用有4种: 1.静态方法引用:类名::静态方法名 在java中,对集合的排序,我们常用java提供的 Collections.sort(List<T> list, ...
- SQL CREATE TABLE 语句
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- 实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题
最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...
- windows下搭建nginx+php+laravel开发环境(转)
1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: 1) 下载 nginx1.14.0(版本根据自 ...
- IDEA远程调试监控端口
大家知道,线上环境定位问题不是那么简单的,如果有非常完善的日志以及监控系统是不必担心的,但是应对这些并不完善的场景下,IDEA提供了一种远程调试的功能,remote集成了可以远程调试的功能,只需要在你 ...
- .NET 开源项目 Polly 介绍
今天介绍一个 .NET 开源库:Polly,它是支持 .NET Core 的,目前在 GitHub 的 Star 数量已经接近 5 千,它是一个强大且实用的 .NET 库. Polly 介绍 官方对 ...
- BugPhobia开发篇章:Beta阶段第VII次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第七次Scrum Meeting 敏捷开发起始时间 2015/12/19 00:00 A.M. 敏捷开发终止时间 2015/12/21 23 ...
- [Alpha阶段]第五次Scrum Meeting
Scrum Meeting博客目录 [Alpha阶段]第五次Scrum Meeting 基本信息 名称 时间 地点 时长 第五次Scrum Meeting 19/04/09 教1_2楼教室 65min ...
- rs485引脚定义
转自:http://blog.chinaunix.net/uid-9688646-id-3275796.html rs485有两种,一种是半双工模式,只有DATA+和DATA-两线,另一种是全双工模式 ...