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. 在函数自身内部,调用函数本身的方式,称为递归. ...
随机推荐
- mysql给root开启远程访问权限
MySql-Server 出于安全方面考虑默认只允许本机(localhost, 127.0.0.1)来连接访问. !!!所以必须给root修改可以远程访问的权限 1.在连接服务器后,操作mysql系统 ...
- thinkphp5引入公共部分header、footer等
由于用惯了tp3.2,改用tp5有些还是感觉别扭的 直接上问题:项目中需要用到引入公共导航.头部.底部.右边部分等等 首先要弄清楚thinkphp5的配置项是哪个文件,众所周知:config.php, ...
- JS之函数实际参数转换成数组的方法[].slice.call(arguments)
实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组. 我们可以通 ...
- Python中字典dict
dict字典 字典是一种组合数据,没有顺序的组合数据,数据以键值对形式出现 # 字典的创建 # 创建空字典1 d = {} print(d) # 创建空字典2 d = dict() print(d) ...
- 2 >&1 的准确含义
1. 2代表标准错误,2 > 表示重定向,就是把标准错误重定向到 1中,这个1如果想表示标准输出的话,就必须在前面加 & 2. 正常情况下,下面这个会有很多错误信息,但是加上2>& ...
- Python 实现批量从不同的Linux服务器下载文件
基于Python实现批量从不同的Linux服务器下载文件 by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/file_for_downl ...
- Android Studio 之 项目瘦身、代码检查
项目瘦身, 一.删除没有用到的资源(图片,string 等等) 先看怎么样找到没有用到的资源,注意:注释掉的 也属于没有用到的. 1.进行代码分析操作 2.查看分析结果 3.选择 Unused res ...
- Android 7.0 新特性
Android7.0提供新功能以提升性能.生产效率和安全性. 关于Android N的性能改进,Android N建立了先进的图形处理Vulkan系统,能少的减少对CPU的占用.与此同时,Androi ...
- Linux/Unix 中 wheel 组的来源
使用过 Linux/Unix 的朋友应该知道,将用户添加都 wheel用户组,让用户可以通过在命令在前加 sudo 临时获取 root 用户的权限.但是有没有朋友会想知道为何这个用户组要交 wheel ...
- mysql----SELECT names/zh
< SELECT names Language: English • 中文 name continent Afghanistan Asia Albania Europe Algeria A ...