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. 在函数自身内部,调用函数本身的方式,称为递归. ...
随机推荐
- CSS border-collapse 属性
表格边框合并: table { border-collapse:collapse; 边框会合并为一个单一的边框 } ----------------------------------------- ...
- DOM技术
DOM概述 DOM:Document Object Model(文档对象模型)(DOM核心就是 文档变对象,标签也变对象,属性也变对象,反正就是把标记文档拆散) 用来将标记型对象封装成对象,并将标记型 ...
- <自动化测试方案书>方案书目录排版
自动化测试方案书 一.介绍 QQ交流群:585499566 这篇是一个系列,用来给需要做自动化测试方案的人做个参考,文章的内容是我收集网上和自己工作经验所得,希望能够给你们有所帮助 背景:因为工作需要 ...
- postman测试方法的 时候总是出现状态码500
postman测试方法的 时候总是出现状态码500 { "timestamp": "2018-07-23T05:43:51.773+0000", ...
- ctypes库调用dll的个人见解
最近着手开发一个小东西涉及到了API接口的知识点, 第一次使用到了ctypes库,在网上找了一大圈,基本都是讲add.dll之后就没了. 就像下面这个: from ctypes import * dl ...
- Scala并发编程【进阶】
package com.dingxin.entrance import java.text.SimpleDateFormat import java.util.Date import scala.ac ...
- Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)
当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...
- MyBatis笔记----报错Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ij34.model.UserMapper.selectUser
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@41cf53f9: startup ...
- python第一百零七天-- Django 基础 2
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- Ubuntu 12.04上安装 MongoDB并运行
Ubuntu 12.04上安装 MongoDB并运行 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Terminal输入 sudo apt-key ...