一、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的更多相关文章

  1. 精通Web Analytics 2.0 (10) 第八章:竞争情报分析

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第八章:竞争情报分析 在现实世界中,收集竞争情报可能意味着雇人在竞争对手的垃圾桶(实际会发生!)翻找. 在虚拟世界中,堆如山的数 ...

  2. 《Linux内核设计与实现》读书笔记 第十八章 调试

    第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (42) ------ 第八章 POCO之使用POCO

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第八章 POCO 对象不应该知道如何保存它们,加载它们或者过滤它们.这是软件开发中熟 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8  测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...

  5. Python之路【第十八章】:Django基础

    Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...

  6. 读《编写可维护的JavaScript》第八章总结

    第八章 避免“空比较” 我们在对传进来的参数做处理之前,肯定需要验证一下是否是我们想要的,也就是说大多数情况下,我们需要对比一下它的类型. 作者首先给了一个看起来都感觉不对的代码: var Contr ...

  7. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  8. Getting Started With Hazelcast 读书笔记(第八章-第十章)

    第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方..   第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...

  9. [Effective Java]第八章 通用程序设计

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. Laxcus大数据管理系统2.0(10)- 第八章 安全

    第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...

随机推荐

  1. akoj-1140-英雄联盟阵营

    英雄联盟阵营 Time Limit:1000MS  Memory Limit:65536KTotal Submit:54 Accepted:16 Description 符文之地——瓦罗兰,作为最大的 ...

  2. LeetCode_Permutations

    Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the follo ...

  3. OpenSSl 加密解密 示例(终于有编程实践了)

    OPenSSl的加密主要有三个重要的函数.看懂下面的代码就基本上知道该如何使用openssL来加密了. 不过注意,要先将libssl.so.1.0和libcrypto.so.1.0文件复制到执行的文件 ...

  4. VS2010下测试程序性能瓶颈

    之前看到Qt的有个BUGreport https://bugreports.qt-project.org/browse/QTBUG-13182 这个BUG是在windows下QFileDialog很慢 ...

  5. 理解mcelog如何工作

    前言 本文,带你了解几个问题? 本文重点,主要看案例2,带你很好的理解mcelog如何工作的? mcelog的干什么的? mcelog 是 x86 的 Linux 系统上用来 检查硬件错误,特别是内存 ...

  6. wxpython 布局管理

    一个典型的应用程序是由不同的部件.这些小部件被放进容器部件.一个程序员必须管理应用程序的布局.这不是一项容易的任务.在wxPython我们有两个选择. *absolute positioning*si ...

  7. PHP设计模式笔记一:准备工作 -- Rango韩老师 http://www.imooc.com/learn/236

    一.编程字体选择 1.选择等宽字体 包括Courier New ,Consolas,Source Code Pro(推荐) 2.环境搭建(建议easyPHP) 二.开发符合PSR规范的基础框架 PSR ...

  8. iOS tableView的图片缓存异步载入

    1.建立一个viewController. .h文件实现UIScrollViewDelegate和UITableViewDelegate,并声明ICTableViewDelegate(用来实现图片有缓 ...

  9. [Regular Expressions] Find the Start and End of Whole Words

    Regular Expression Word Boundaries allow to perform "whole word only" searches within our ...

  10. ORACLE 视图的 with check option

    ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...