JAVA自学笔记20

1、递归:

1)方法定义中定义中调用方法本身的现象

2)要有出口,否则就是死递归

次数不能太多。否则内存将溢出

构造方法不能递归使用

//斐波那契数列:1,1,2,3,5,8,13,21.34
public int Fibonacci(int n){
if(n==1||n==2){return 1;}
return Fibonacci(n-1)+Fibonacci(n-2)
}

@例题1:遍历目录下指定后缀名结尾的文件名称

private static void getAllJavaFilePaths(File srcFolder){
//获取该目录下所有的文件或者文件夹的File数组
File[] fileArray=srcFolder.listFiles();
for(File file:fileArray){
if(file.isDirectory()){
getAllJavaFilePaths(file)
}else{
if(file.getNmae().endsWith(".java")){
System.out.println(file.getAbsolutePath());
}
}
}
}

@例题2:递归删除带内容的目录

public class DeleteFolders{
File[] fileArray=srcFolder.listFiles();
for(File file:fileArray){
if(file.isDirectory()){
deleteFolder(file);
}
else{
System.out.println(file.delete());
}
}
System.out.println(srcFolder.delete);
}

2、IO

1)用于处理设备之间的数据传输。java对数据的操作是通过流的方式,java用于操作的流的对象都在IO包中



2)IO流分类

按数据流向分:

输入流:读入数据

输出流:写出数据

按数据类型分

字节流

字符流

3)常用基类:

抽象基类:InputStream,OutputStream

字符流的抽象基类:

Reader,Writer

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

4)FileOuputStream

构造方法:

FileOutputStream(File file)

FileOutputStream(String name)

//在一个文本文件中写一句hello
//采用字节输出流
//创建字节流输出对象
File file=new File("Fos.txt");
FileOutputStream fos=new FileOutputStream(file);
//或FileOutputStream fos=new FileOutputStream("fos.txt");
//写数据
fos.writer("hello".getBytes());
//释放资源
fos.close();//流关闭,通知系统释放相关资源

4)字节流写数据方式

public void write(int b)

写一个字节

public void write(byte[] b)

写一个字节数组

public void write(byte[] b,int off,int leng)

写一个字节数组的一部分

FileOutputStream fos=new FileOutputStream("fos2.txt");
fos.write(97);//写入a
byte[] bys={97,98,99,100,101};
fos.write(bys);
fos.write(bys,1,3);
//
//实现换行
FileOutputStream fos=new FileOutputStream("fos.txt");
for(int x=0,x<0,x++){
fos.write(("hello"+x).getBytes());
fos.write("\n".getBytes());
}
fos.close();
}

注意:

//追加写入
FileOutputStream fos=new FileOutputStream("fos.txt",true);
for(int x=0,x<0,x++){
fos.write(("hello"+x).getBytes());
fos.write("\r\n".getBytes());
}

5)异常处理

如果fos不是null,才能close

6)字节流读取数据

FileInputStream

构造方法:

FileInputStream(File file)

FileInputStream(String name)

成员方法:

int read():一次读取一个字节,返回-1则已读到末尾

int read(byte[] b):一次读取一个字节数组

FileInputStream fis=new FileInputStream(fis.txt);
int by=fis.read();
fis.close();
//改进,仅适用与字母与数字
int by=0;
while((by=fis.read())!=-1){
System.out.print((char)by);
fis.close();
}
//字节流复制文本文件
//封装数据源,数据源已读要存在
FileInputStream fis=new FileInputStream("a.txt");
//封装目的地
FileOuputStream fos=new FileOuputStream("b.txt") int by=0;
while((by=fis.read())!=-1{
fos.write(by);
}
fis.close();
fos.close();
//将c盘目录下的a.txt内容复制到b.txt中
FileInputStream fis=new FileInputStream("c:\\a.txt");
FileOuputStream fos=new FileOuputStream("d:\\b.txt");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
} fos.close();
fis.close();
//复制图片
FileInputStream fis=new FileInputStream("c:\\a.jpg");
FileOuputStream fos=new FileOuputStream("d:\\b.jpg");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
fos.close();
fis.close();
}
//复制视频
FileInputStream fis=new FileInputStream("c:\\a.mp4");
FileOuputStream fos=new FileOuputStream("d:\\b.mp4");
int by==0;
while((by=fis.read()0!=-1){
fos.write(by);
fos.close();
fis.close();
}//速度太慢,一次一个字节复制

研究

int read(byte[] b):一次读取一个字节数组,返回的是实际读取的字符数目,字节数组可被覆盖。到大结尾返回-1

//读取一个文件
byte[]bys=new byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
System.out.println(new String(bys,0,len));
}
fis.close();

存储图解:

//复制文本文件
FileInputStream fis=new FileIntputStream("c:\\a.txt");
FileOuputStream fis=new FileOutputStream("b.txt");
byte[]bys=new byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
for.write(bys,0,len);
fos.close();
fis.close();
}
字节流复制视频
FileInputStream fis=new FileIntputStream("c:\\a.mp4");
FileOuputStream fis=new FileOutputStream("b.mp4"); byte[1024];
int len=0;
while((len=fis.read(bys)!=-1){
for.write(bys,0,len);
fos.close();
fis.close();

7)字节缓冲流

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区的效果,java本身在设计过程中也考虑到了这样的设计思想(装饰设计模式后面讲解),故提供了字节缓冲流

字节缓冲输出流

BufferedOutputStream

字节缓冲输入流

BufferedInputStream

构造方法可以指定缓冲区的大小,因为默认缓冲区大小就足够了。

BufferedIn(out)putStream(In(Out)putStream)

字节缓冲区流仅仅提供缓冲区为高效而设计,但真正的读写操作还得靠基本的流对象实现。

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"));
//写数据
bos.write("hello".getBytes());
bos.close();
BufferedInputStream bos=new BufferedInputStream(new FileInputStream("bos.txt"));
//读数据
byte[]bys=new byte[1024];
int len=0;
while((len=bis.read(bys)!=-1){
System.out.println(new String(bys,0,len));
}

JAVA自学笔记20的更多相关文章

  1. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  2. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  3. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  4. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  5. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  6. JAVA自学笔记19

    JAVA自学笔记19 1.集合总结 Collection(单列集合) List(有序可重复) ArrayList:底层数据结构是数组 ,查询快,增删慢.线程不安全,效率高 Vector:底层数据结构是 ...

  7. JAVA自学笔记17

    JAVA自学笔记17 1.Map接口 1)概述 将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值.可以存储键值对的元素 2)与Collection接口的不同: ①Map是双列的 ...

  8. JAVA自学笔记25

    JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...

  9. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

随机推荐

  1. 多线程外排序解决大数据排序问题2(最小堆并行k路归并)

    转自:AIfred 事实证明外排序的效率主要依赖于磁盘,归并阶段采用K路归并可以显著减少IO量,最小堆并行k路归并,效率倍增. 二路归并的思路会导致非常多冗余的磁盘访问,两组两组合并确定的是当前的相对 ...

  2. WPF数据爬取小工具-某宝推广位批量生成,及订单爬取 记:接单最痛一次的感悟

    项目由来:上月闲来无事接到接到一个单子,自动登录 X宝平台,然后重定向到指定页面批量生成推广位信息:与此同时自动定时同步订单数据到需求提供方的Java服务. 当然期间遇到一个小小的问题就是界面样式的问 ...

  3. bootstrap下jQuery自动完成的样式调整-【jQuery】

    1. 覆盖层调整 在bootstrap的对话框中,当其中的输入项使用了自动完成控件,则其中下拉框中的内容就会被bootstrap对话框的覆盖层遮盖. 为了能够使后面的自动完成的层显示出来,可以使用如下 ...

  4. Zabbix监控Nginx性能状态

    Nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控,从而发现故障隐患,Ngnx的监控指标可分为:基本活动指标,错误指标,性能指标 监控Nginx思路: 1)首先,要想监控 ...

  5. Codeforces 359E Neatness

    Neatnes dfs一下用set维护能不能走, 进入的时候点亮灯, 回溯的时候灭灯. #include<bits/stdc++.h> #define LL long long #defi ...

  6. BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演

    原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...

  7. BZOJ1095 [ZJOI2007]Hide 捉迷藏 动态点分治 堆

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ1095.html 题目传送门 - BZOJ1095 题意 有 N 个点,每一个点是黑色或者白色,一开始所 ...

  8. Python中type和object

    type  所有类是type生成的 a = 1 b = "abc" print("type a:{}".format(type(a))) print(" ...

  9. day 58 bootstrap -part1

    我们的bootstrap主要使用都是官网里面的内容,官网里面的都整理得很完备,有需要的时候就直接去里面找即可, 关于这个bootstrap,我所理解的就是,我们前面所学的那些,从html开始一直到后面 ...

  10. day20 模块-sys,time,collection

    所有常用模块的用法:  http://www.cnblogs.com/Eva-J/articles/7228075.html 前情回顾: # 常用模块 # 常用模块 —— 东西多 # 异常处理 # 什 ...