第八章I/O
一、File的使用
①、new File(String fileName);的意义
②、获取当前文件夹下的所有文件
③、获取当前文件夹时候过滤掉不许要的文件夹
④、创建File文件,了解mkDir()和mkDirs()的区别
⑤、各种获取File路径的方法,和不同之处
二、I/O
①、几个重要的流
ByteArrayInputStream 、ByteArrayOutputStream、DataInputStream、DataOutputStrean、BufferedInputStream
②、stream转换成writter流(字节流转换成字符流)
③、RandomAccessFile的使用
④、PrintWrite
回答:
一、newFile()的作用
获取这个File文件的句柄,①、文件可以指Directory(文件夹,目录)也可以是File(文件,具体文件)
②、当文件不存在的时候,也是会获得文件的句柄(不过该句柄没任何作用而已),并且不会创建该文件。
二、获取当前文件夹的所有文件
调用file.listFiles()方法,返回File[]数组,如果想转成List就添加上Arrays.asList();转型
三、读取时候添加文件过滤器(FileNameFilter)
/**
* 原理:通过调用file的listFile()获取file文件夹下的文本
* listFile(FileNameFilter filter)
* FileNameFilter代表文件名过滤器,这是一个接口,需要自己创建。(策略模式)
* 之后listFile()会重复调用accept()方法
*/
public class Main { public static void main(String[]args){
//获取文件的句柄
File file = new File("D://VS");
//返回的是数组
File[] files = file.listFiles(new FileFilter(".*"));
//通过Arrays转化成为Collection,当然这是只读的List
List<File> lists = Arrays.asList(files);
for(File myFile:lists){
System.out.println(myFile.getName());
}
}
} class FileFilter implements FilenameFilter{
private Pattern pattern;
//正则表达式,添加过滤条件
public FileFilter(String reg){
pattern = Pattern.compile(reg);
} @Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
//判断是否符合过滤条件
return pattern.matcher(name).matches();
} }
Main
四、创建File文件
//获取句柄
File file = new File("test");
//如果该文件不存在实体的时候,创建该文件
if (!file.exists()){
file.mkDir();//创建该文件或文件夹
}
createFile
1、File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败
2、File类的mkdir方法根据抽象路径创建目录
3、File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录
4、File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。
5、除mkdirs方法外,以上方法在创建文件和目录时,必须保证目标文件不存在,而且父目录存在,否则会创建失败
五、获取File文件的路径
http://www.cnblogs.com/xulianbo/archive/2011/08/26/2154027.html
getPath()返回的是File构造方法里的路径,不做任何处理
getAbsolutePath()返回的是 user.dir+getPath(),也就是执行路径(默认保存的路径:比如说在C;//中)加上File构造方法中的路径
getCanonicalPath()返回的是将符号完全解析的路径,也就是全路径
所以:推荐使用getCanonicalPath()
六、重要的IO流
ByteArrayInputStream: 从byte[] bytes中读取 bytes文件中的字节。
例:
byte [] bytes = new byte[1024];
String str = "hello world";
bytes = str.getBytes();
//创建byte流输出
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
int b = -1;
while((b = bais.read()) != -1){
System.out.print(b + " ");
}
System.out.println("");
//for循环输出
for(int i=0; i<bytes.length; ++i){
System.out.print(bytes[i]+" ");
}
使用ByteArrayInputStream的优点:可以套接其他流的装饰类
ByteArrayOutputStream:将文件以字节的方式写入内存的缓冲区。 然后再将byte提取出来。
例:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("test");
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = 0;
while((b = fis.read()) != -1){
baos.write(b);
}
byte [] bytes = new byte[1024];
bytes = baos.toByteArray();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DataInputStream: 从文件中读取基础类型。 我们一般都是从流中读取字节然后在转化成String类型,DataInputStream可以直接读取字节并转化成int 、char等基础类型。(感觉要与DataOutputStream配套使用才有效果) 提供 readInt()、readUTF8()等方法
DataOutputStream:将基础类型输出到文件中。提供writeInt()、writeUTF8()等方法。
例:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建文件
File file = new File("D://asd.txt");
if (!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileOutputStream fos = null;
//将数据输出到文件中
try {
//获取文件流
fos = new FileOutputStream(file);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(5);
dos.writeUTF("你好");
dos.writeBoolean(true);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//从文件中获取数据
try {
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
StringBuilder stringBuilder = new StringBuilder();
//读取的顺序要按照放入的顺序来。
stringBuilder.append(dis.readInt() +" ");
stringBuilder.append(dis.readUTF()+ " ");
stringBuilder.append(dis.readBoolean()+ " ");
System.out.println(stringBuilder.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DataStream
BufferedInputSream: 在内部设定一个缓冲流,现将数据写入缓冲流再读取,这样就不需要反复写入,提交程序运行效率。
RandomAccessFile:能够自定义锚点,从文件中的某个位置开始写入(比如说,从文件的最后开始写入)。支持读写。支持写入或者读取基引用类型。
PrintWriter:格式化写入文件。可以防止乱码
第八章I/O的更多相关文章
- 精通Web Analytics 2.0 (10) 第八章:竞争情报分析
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第八章:竞争情报分析 在现实世界中,收集竞争情报可能意味着雇人在竞争对手的垃圾桶(实际会发生!)翻找. 在虚拟世界中,堆如山的数 ...
- 《Linux内核设计与实现》读书笔记 第十八章 调试
第十八章调试 18.1 准备开始 需要准备的东西: l 一个bug:大部分bug通常都不是行为可靠而且定义明确的 l 一个藏匿bug的内核版本:找出bug首先出现的版本 l 相 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (42) ------ 第八章 POCO之使用POCO
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第八章 POCO 对象不应该知道如何保存它们,加载它们或者过滤它们.这是软件开发中熟 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8 测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...
- Python之路【第十八章】:Django基础
Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...
- 读《编写可维护的JavaScript》第八章总结
第八章 避免“空比较” 我们在对传进来的参数做处理之前,肯定需要验证一下是否是我们想要的,也就是说大多数情况下,我们需要对比一下它的类型. 作者首先给了一个看起来都感觉不对的代码: var Contr ...
- 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...
- Getting Started With Hazelcast 读书笔记(第八章-第十章)
第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方.. 第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...
- [Effective Java]第八章 通用程序设计
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Laxcus大数据管理系统2.0(10)- 第八章 安全
第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...
随机推荐
- 数据结构之------C++指针冒泡排序算法
C++通过指针实现一位数组的冒泡排序算法. 冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 代码: /* Name:冒泡排序算法 Copyright:Null ...
- 开心菜鸟学习系列学习笔记------------nodejs util公共函数
global 在最外层定义的变量: 全局对象的属性: 隐式定义的变量(未定义直接赋值的变量). 一.process process 是一个全局变量,即 global 对象的属性 ...
- Ext4.0.7使用Ext.grid.ColumnModel报错:TypeError: Ext.grid.Model is not a constructor
代码如下: Ext.onReady(function(){ //定义列 var cm = new Ext.grid.ColumnModel([ {header: '编号', dataIndex: 'i ...
- Keil C动态内存管理机制分析及改进
Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mempool.mallloe和free这3个Ke ...
- MySQL库表状态查询
一. 查看库的各链接状态 对于一个mysql连接或者一个线程,任何时刻都有一个状态,表示其当前正在做什么.一般使用show full processlist查看. +---------+------- ...
- unix c 05
dup和dup2用于复制文件描述符,区别在于dup2可以指定新的文件描述符的数值,如果新的文件描述符的值已经被使用,dup2会关闭掉后进行复制. dup和dup2 不会复制文件表,只是文件描述符的复制 ...
- HDU1698 Just a Hook (区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Thinkphp多表联查mysql写法
$model=M("user","","mysql://root:222222@localhost:3306/jiaoyou"); //换数 ...
- Direct3D 索引缓存
小学的时候我们知道3个顶点组成一个三角形,那么四个顶点我们会说有4个三角形.这就是一个顶点同时参与了四次绘制三角形的结果. 在程序中也一样,比如我们绘制的两个三角形是挨着一起的,总有几个顶点是重合的. ...
- webService 客户端接口调用【java】
最近实际项目中使用到了WebService,简单总结下使用方式: 1.拿到接口:http://*******:8080/osms/services/OrderWebService?wsdl 我们可以将 ...