JAVA学习第五十四课 — IO流(八)打印流 & 序列流
一、综合练习—文件清单列表
获取指定文件夹下,指定扩展名的文件(含子文件夹),并将这些文件的绝对路径写到一个文本文件里。也就是建立一个指定扩展名的文件列表
1.深度遍历
2.过滤器->容器
3.写入文件
import java.util.List;
import java.io.*;
import java.util.ArrayList; public class Main
{
public static void main(String[] args) throws IOException { File dir = new File("D:\\java");//指定源文件
FilenameFilter filter = new FilenameFilter() {//过滤器 public boolean accept(File dir, String name) { return name.endsWith(".java");
}
};
List<File> list = new ArrayList<File>();//容器
GetFile(dir, filter, list);//获取符合条件的文件
File dFile = new File(dir,"javalist.txt");
WriteToFile(list, dFile);//写入
}
/*
*
* */
public static void GetFile(File dir , FilenameFilter filter,List<File> list) throws IOException{
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
GetFile(file,filter,list);
}else{
if(filter.accept(dir, file.getName())){
list.add(file);
}
}
}
}
public static void WriteToFile(List<File> list,File destfile){
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(destfile));
for(File file : list){
bw.write(file.getAbsolutePath());
bw.newLine();
bw.flush();
}
} catch (Exception e) {
throw new RuntimeException("写入失败"); }finally{
if(bw!=null){
try {
bw.close();
} catch (Exception e2) {
// TODO: handle exception
throw new RuntimeException("关闭失败");
} }
}
}
}
二、IO包中的其它类
打印流:PrintWriter 、PrintStream:能够直接操作输入流和文件
序列流:SequenceInputStream:对多个流进行合并
操作对象:ObjectInputStream、ObjectOutputStream:被操作的对象须要实现Serializable(标记接口)
打印流
字节打印流:PrintStream
1.提供了打印方法能够对多种数据类型值进行打印,并保持数据的表示形式
2.永远不会抛出IOException
构造函数,接收三种类型的值
1.字符串路径
2.File对象
3.字节输出流
public static void main(String[] args) throws IOException {
PrintStream ps = new PrintStream("A.txt");//指定写入文件
//ps.write(98);//保存是b。仅仅写入二进制的最低8位
ps.print(98);//将数据变成字符串,原样打印,每次打印都会覆盖原有数据
ps.close();
}
字符打印流:PrintWriter
构造函数,接收四种类型的值
1.字符串路径
2.File对象
3.字节输出流
4.字符输出流
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//PrintWriter pw = new PrintWriter(System.out,true)
PrintWriter pw = new PrintWriter(new FileWriter("text.txt"),true);//自己主动刷新,且仅仅有输出流才会自己主动刷新
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line))
break;
pw.println(line);
}
pw.close();
br.close();
}
序列流
SequenceInputStream 表示其它输入流的逻辑串联。它从输入流的有序集合開始,并从第一个输入流開始读取。直到到达文件末尾。接着从第二个输入流读取,依次类推,直到到达包括的最后一个输入流的文件末尾为止。
将多个源,合成一个源
构造方法:
SequenceInputStream(Enumeration<?
通过记住參数来初始化新创建的 SequenceInputStream。该參数必须是生成执行时类型为 InputStream 对象的Enumeration 型參数。 |
SequenceInputStream(InputStream s1, 通过记住这两个參数来初始化新创建的 SequenceInputStream(将按顺序读取这两个參数,先读取 s1。然后读取s2),以提供从此 SequenceInputStream 读取的字节。 |
public static void main(String[] args) throws IOException {
//将a.txt,b.txt,c.txt的数据合并到一个文件
//SequenceInputStream的构造函数有两个。演示枚举
// Vector<FileInputStream> vec = new Vector<FileInputStream>();
//
// vec.add(new FileInputStream("a.txt"));
// vec.add(new FileInputStream("b.txt"));
// vec.add(new FileInputStream("c.txt"));
// Enumeration<FileInputStream> en = vec.elements();
ArrayList<FileInputStream> ar = new ArrayList<FileInputStream>();//ar下没有枚举,可是有迭代器
ar.add(new FileInputStream("a.txt"));
ar.add(new FileInputStream("b.txt"));
ar.add(new FileInputStream("c.txt"));
Enumeration<FileInputStream> en = Collections.enumeration(ar);//原理例如以下
/*final Iterator< FileInputStream> it = ar.iterator();
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {//实现Enumeration
public boolean hasMoreElements() {
return it.hasNext();
}
public FileInputStream nextElement() {
return it.next();
}
};*/
SequenceInputStream sis = new SequenceInputStream(en);//合并
FileOutputStream fos = new FileOutputStream("d.txt");
byte[] by = new byte[1024];
int len = 0;
while((len = sis.read(by))!=-1){
fos.write(by,0,len);
}
fos.close();
sis.close();
}
JAVA学习第五十四课 — IO流(八)打印流 & 序列流的更多相关文章
- JAVA学习第五十二课 — IO流(六)File对象
File类 用来给文件或者目录封装成对象 方便对文件与目录的属性信息进行操作 File对象能够作为參数传递给流的构造函数 一.构造函数和分隔符 public static void FileDemo( ...
- JAVA学习第五十九课 — 网络编程概述
网络模型 OSI(Open System Interconnection)开放系统互连:參考模型 TCP/IP 网络通讯要素 IP地址 port号 传输协议 网络參考模型 七层OSI模型的基本概念要了 ...
- JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点
整个集合框架中最经常使用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有 ...
- JAVA学习第六十四课 — 反射机制
Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...
- JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里非常多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发经常使用 HashSet集合 .TreeSet ...
- Java学习之路(十二):IO流<二>
字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...
- JAVA学习第六十二课 — TCP协议练习
通过练习掌握TCP在进行传输过程中的问题 练习1:创建一个英文大写转换server client输入字母数据,发送给服务端,服务端收到后显示到控制台,并将该数据转成大写返回client,知道clien ...
- 【Java学习笔记之三十四】超详解Java多线程基础
前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...
- Java学习之路(十二):IO流
IO流的概述及其分类 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流(读写数据) 输出流(写数据) 流按操作 ...
随机推荐
- leetcode 生成杨辉三角形, 118 119 Pascal's Triangle 1,2
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...
- caffe(9) caffe例子
为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...
- WSGI和CGI
https://www.zhihu.com/question/19998865 https://segmentfault.com/a/1190000003069785
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- Python中的引用计数法
目录 引用计数法 增量操作 计数器溢出的问题 减量操作 终结器 插入计数处理 引用计数法 增量操作 如果对象的引用数量增加,就在该对象的计数器上进行增量操作.在实际中它是由宏Py_INCREF() 执 ...
- JavaScript【1】(数据类型)
JS系列教程(数据类型)[1]
- Jeff Dean专访,有不少干货
<专访Jeff Dean:我们要推动机器学习再上一层楼> 文件链接如下: Link https://arxiv.org/ 有意思的是,里面提到的 arXiv网站,一个能够用来证明论文上传时 ...
- android内存释放处理
不知道大家对android内存释放都做什么样的处理,本人接触android不久,近期开发小游戏的过程中,由于游戏界面组件较多.刚玩游戏的时候感觉还好,可是重复进入游戏界面玩几次之后,游戏就会卡顿,我瞬 ...
- CCNP路由实验之九 路由策略
CCNP路由实验之九 路由策略 路由器在公布与接收路由信息时,可能须要实施一些策略.以便对路由信息进行过滤,比如仅仅接收或公布满足一定条件的路由信息. 一种路由协议可能须要引入其它的路由协议发现 ...
- 《TCP/IP具体解释》读书笔记(19章)-TCP的交互数据流
在TCP进行传输数据时.能够分为成块数据流和交互数据流两种.假设按字节计算.成块数据与交互数据的比例约为90%和10%,TCP须要同一时候处理这两类数据,且处理的算法不同. 书籍本章中以Rlogin应 ...