15.io流,递归
一。file的常用api
二。算法:递归
1.定义:递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
案例:计算10的阶乘: 10*9*8*7*6*5*4*3*2*1
三。文件处理IO
1.字节流:可以处理任何文件类型
字节输入流
InputStream in = BufferedInputStream FileInputStream File
in.read()
字节输出流
OutputStream os = BufferedOutputStream FileOutputStream File
in.write(byte[])
2.字符流:只能处理文本型文件类型
Reader r = BufferedReader FileReader File
r.readerLine()
Write w = BufferedWrite FileWrite File
w.write
四、作业及练习
1.做一个模拟dos窗口的命令集合:dir和cd功能
dir是显示当前目录下的所有子目录和文件名 还有文件大小
cd是将当前目录进入到指定文件目录下
要求从d盘开始
2.输入一个字符串,要求把字符串从第一个字符每次叠加一个字符输出,用递归算法
例如:“白日依山尽” 输出:白 白日 白日依 白日依山 白日依山尽
3.输入一个文件夹路径,打印输出该文件夹下所有文件路径
test
html
html
index.html
index.html
java
First.java
HelloWorld.java
oracle
sql
my.sql
hard.txt
read.txt
hello.txt
Huwa.java public void directory(String path){
//构造file
//拿到目录结构下的所有file
//循环file数组,判断如果是文件打印输出,如果是目录则继续调用自己递归
}
4.写一个方法,用来替换文章中的字符串
5.写一个方法,用来统计文章中字符串出现的次数
1.将一篇没有自动换行的文章按规则实现换行。
规则为:句号,分号,省略号,感叹号,疑问号。
遇到以上符号就换行
2.将成绩文档中的所有成绩求平均成绩,最高分,和总人数?
学号,姓名,学科,成绩
1,张安,语文,88
2,刘鹗,语文,67
3,修改,语文,87
4,鳄鱼,语文,55
5,没地方,语文,45
6,大飞哥,语文,66
7,苟富贵,语文,78
8,表单,语文,98
9,放到,语文,78
10,二维热无,语文,99
11,都是,语文,87
12,放到,语文,67
13,的v,语文,56
14,地方,语文,76
15,水电费,语文,87
16,大飞,语文,99
17,同意,语文,89
18,回滚,语文,78
19,交换机,语文,67
20,玩儿,语文,87
五、例子
文件基本操作+dos操作系统模拟实例:
package com.demo1120; import java.io.File;
import java.io.IOException;
import java.util.Scanner; import org.junit.Test; public class FileDemo {
@Test
public void test(){
File file = new File("d:/test/stu.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
file.delete();
System.out.println(file.exists()); File test = new File("d:/test");
File[] files = test.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
} @Test
public void dos(){
Scanner sc = new Scanner(System.in);
String path = "d:/"; System.out.println("d:/>");
while(true){
String command = sc.nextLine();
if("dir".equals(command)){
File file = new File(path);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
System.out.println(path+">");
} if(command.startsWith("cd")){
path += "/"+command.substring(command.indexOf(" ")+1);
File file = new File(path);
System.out.println(path+">");
}
}
}
}
递归实例:
package com.demo1120;
import org.junit.Test;
public class RecursionDemo {
public static void main(String[] args) {
RecursionDemo r = new RecursionDemo();
// int result = r.factoril(10);
// System.out.println(result);
r.string("白日依山尽");
}
//计算阶乘
public int factoril(int num){
if(num==1){
return 1;
}else{
int result = num*factoril(num-1);
System.out.println(result);
return result;
}
}
public String string(String s){
if(s.length()==1){
System.out.println(s);
return s;
}else{
String result = s+string(s.substring(0,s.length()-1));
System.out.println(s);
return result;
}
}
}
打印文件夹下所有文件实例
package com.demo1120;
import java.io.File;
public class Work {
public static void main(String[] args) {
Work w = new Work();
w.directory("d:/test",0);
}
public void directory(String path,int table){
//构造file
File file = new File(path);
//拿到目录结构下的所有file
File[] files = file.listFiles();
//循环file数组,判断如果是文件打印输出,如果是目录则继续调用自己递归
for (int i = 0; i < files.length; i++) {
for (int j = 0; j < table; j++) {
System.out.print("\t");
}
if(files[i].isFile()){
System.out.println(files[i].getName());
}
if(files[i].isDirectory()){
System.out.println(files[i].getName());
directory(path+"/"+files[i].getName(),table+1);
}
}
}
}
读取一个文件中的内容并写入到另一个文件中的实例(字节流):
package com.demo1120; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; public class StreamDemo { public static void main(String[] args) {
StreamDemo sd = new StreamDemo();
byte[] b = sd.readFile("d:/test/笔记");
sd.writeFile("d:/海文", b);
}
public byte[] readFile(String path){ File file = new File(path);
//把文件读成字节输入流
InputStream in = null;
byte[] bytes = new byte[(int)file.length()];
try{
in = new BufferedInputStream(new FileInputStream(file));
//从流中把字节内容存入到java内存,字节数组
int offset = 0;//记录每次读取的初始位置
int num = 0;//记录每次读取的量
//循环从流中把字节存储到字节数组中
while(offset<bytes.length&&num>=0){
num = in.read(bytes, offset, bytes.length-offset);
offset = num;
}
//将字节数组构造成字符创 “gbk”是支持中文的字符集编码
System.out.println(new String(bytes, "gbk"));
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();//关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
return bytes;
} public void writeFile(String path,byte[] bytes){
//字节输出流
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(new File(path)));
os.write(bytes);
os.flush();//清空缓存,如果不清空有可能有一部分在缓存中无法输出到文件
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
读取一个文件中的内容并写入到另一个文件中的实例(字符流):
package com.demo1120; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer; /**
* 字符流案例
*/
public class CharStreamDemo { public static void main(String[] args) {
CharStreamDemo cd = new CharStreamDemo();
// cd.readFile("d:/test/笔记");
cd.writeFile("d:/测试");
} public String readFile(String path){
File file = new File(path);
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new FileReader(file));
String s;
while((s = reader.readLine())!=null){
sb.append(s+"\n");
}
System.out.println(sb.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
} public void writeFile(String path){
File file = new File(path);
Writer w = null;
try {
w = new BufferedWriter(new FileWriter(file));
w.write("你好啊。\r\n我不好");//内存输出到文件,换行符是\r\n
w.flush();//清空缓存
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
15.io流,递归的更多相关文章
- Java第三阶段学习(二、IO流--------递归,字节流Stream)
一.递归 定义:指方法在方法内调用自己 适用于方法的运算主体不变,但运行的时候,参与运算的方法参数会变化注意:一定要给递归一个出口,否则内存溢出 练习题1:使用递归打印文件夹中所有的文件,包含子目录中 ...
- IO流——递归(输出所有文件)
package pers.zbb.File; import java.io.File; public class FileDemo { public static void main(String[] ...
- 15 IO流(十二)——数据流Data InputStream/OutputStream 未学会
数据流的引入 Data流的父类是Filter抽象基类,也就是说Data流是装饰流. 数据流可以将数据的类型也一起传输. 数据流的读取写入顺序(数据类型的读写顺序)需要一致. 未完成代码 /** *Da ...
- 021.15 IO流 其他流
IO包中的其他类操作基本数据类型:DataInputStream与DataOutputStream操作字节数组:ByteArrayInputStream与ByteArrayOutputStream操作 ...
- IO流-递归删除带内容的目录
/* * 需求:递归删除带内容的目录 * * 目录:demo * ------------------------------------------------------------------- ...
- IO流-递归遍历目录下指定后缀名结尾的文件名称
/* *自定义遍历目录下指定后缀名结尾文件的名称的方法: * * param file:指定目录 name:指定后缀名 */ 1 public static void FileName(File fi ...
- (15)IO流之File
File类用封装了一个文件夹或者文件的所有属性. File类的构造方法: File(String pathname) 指定文件或者文件夹的路径创建一个File文件 File(File parent, ...
- IO流——File类(文件流类)
java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...
- Java的递归、IO流
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.递归 [递归] 1. 在函数自身内部,调用函数本身的方式,称为递归. ...
随机推荐
- 10个常见的JavaScript BUG
译者按: 安全起见,在开发中我基本不用==. 原文: 10 COMMON JAVASCRIPT BUGS AND HOW TO AVOID THEM 译者: Fundebug 为了保证可读性,本文采用 ...
- 今天学习了flex布局
前言:这个网站详细讲了水平.垂直.水平垂直的css方法.https://css-tricks.com/centering-css-complete-guide/ 布局的传统解决方案,基于盒状模型,依赖 ...
- Python importlib 动态加载模块
# 创建一个 src 文件夹,里面有一个 commons.py 文件,内容如下 def add(): print("add ....") # 创建一个 app.py 文件,内容如下 ...
- cf1139D. Steps to One(dp)
题意 题目链接 从\([1, M]\)中随机选数,问使得所有数gcd=1的期望步数 Sol 一个很显然的思路是设\(f[i]\)表示当前数为\(i\),期望的操作轮数,转移的时候直接枚举gcd \(f ...
- BZOJ3028: 食物(生成函数)
题意 链接 Sol 生成函数入门题. 对每个物品分别列一下,化到最后是\(\frac{x}{(1-x)^4}\) 根据广义二项式定理,最后答案是\(C_{(N - 1) + 4 - 1}^{4-1} ...
- 如何为你的 Vue 项目添加配置 Stylelint
如何为你的 Vue 项目添加配置 Stylelint 现在已经是 9102 年了,网上许多教程和分享帖都已经过期,照着他们的步骤来会踩一些坑,如 stylelint-processor-html 已经 ...
- 一句SQL完成动态分级查询
在最近的活字格项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式 ...
- readLine()的注意点
我在用socket做即时通讯的时候,读取服务器返回的信息用了BufferedReader,用起来挺方便的. BufferedReader br = new BufferedReader(new Inp ...
- ViewPager结合view无限滑动
使用viewPager进无限滑动,这里的实现是在适配器里面进行,当然在外头使用滑动监听也行. import android.support.v4.view.PagerAdapter; import a ...
- 原型链、闭包四种作用、继承、命名空间、枚举类型(day13)
原型链 JavaScript 对象是动态的属性“包”(指其自己的属性).JavaScript 对象有一个指向一个原型对象的链.当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型, ...