JavaWeb入门(四) I-O
来源:互联网 发布:三好长庆 知乎 编辑:程序博客网 时间:2024/05/18 02:06
JavaWeb入门(四) I/O
标签(空格分隔): JavaWeb
原文地址
File类
File 类是 I/O 操作中最常用的类。它的常用方法有:
exists() 文件是否存在
isFile() 是否是文件
isDirectory() 是否是目录
createNewFile() 创建文件
delete() 删除文件或空文件夹
renameTo(File dest) 重命名,可以是不同目录,但不能是不同盘符
mkdir() 创建单级文件夹
mkdirs 可创建多级文件夹
文件属性的读取和设置:
file.length() 文件的大小,单位:byte
file.getParent() 父目录的相对路径
file.getAbsolutePath() 文件的绝对路径
例:如何得到父级目录的绝对路径
String parentAbsPath = new File(file.getAbsolutePath()).getParent();
canWrite() 文件可写性
canRead() 文件可读性
setReadable(true) 设置文件为可读
setWritable(false) 设置文件为不可写
文件的简单读写
读取方式
1. FileInputStream 文件数据输入为字节流
2. InputStreamReader 字节流到字符流的桥梁,从名称中也能看出这是InputStream 的Reader。
3. BufferedReader 读取字符流的缓冲区。
例:
public static void readFile(String _fileName) throws IOException { FileInputStream fis = new FileInputStream(_fileName); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String str; while ((str = br.readLine()) != null){ System.out.println(str); } br.close(); //先关闭后打开的 isr.close(); fis.close(); }
写入方式:
1. FileOutputStream 文件数据输出为字节流
2. OutputStreamWriter 字符流与字节流的桥梁
3. BufferedWriter 写入字符流缓冲区
字符流与字节流的区别
字节流通常以Stream 结尾,如文字,图片,流媒体(音视频),字节流以字节为单位对文件或其他输入进行读取。
字符流通常以Reader, Writer 结尾,它只能处理文本类型数据,它每次读取一个或多个字节,在去查询指定编码表如UTF-8然后返回字符。
如何使用字节流进行数据的读写?
利用FileInputStream 的read() 和 FileOutputStream 的 write 方法。
例:
//字节流的读取 public static void readInputStream(String _fileName) throws IOException { FileInputStream fis = new FileInputStream(_fileName); byte[] bytes = new byte[4]; //用来存放字节流 ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); int length = 0; while ((length =fis.read(bytes)) != -1){ bos.write(bytes, 0, length); } System.out.println(new String(bos.toByteArray(), "utf-8")); fis.close(); } //字节流的写入 public static void writeOutputStream(String _fileName) throws IOException { FileOutputStream fos = new FileOutputStream(_fileName); fos.write("武都头,您里面请!".getBytes("utf-8")); }
注:
- 这里是利用FileInputStream 的read() 的方法直接读入一个byte 数组中,然后再将这个byte 数组转为字符串。
- 这个length 是非常重要的,它记录了每次实际读入byte 数组中的字节个数。如何不考虑这点,可能会产生乱码。
- 同理,可利用FileOutputStream 的 write() 的方法写入一个byte 数组。
直接使用字符流进行读写
上面的例子我们是通过字节流的方式进去读取的,然后将读取的字节数组转为字符串。而借助InputStreamReader 和 OutputStreamWriter 我们可以直接读取字符流。
例
//字符流的读取 public static void readByInputStreamReader(String _fileName) throws IOException { FileInputStream fis = new FileInputStream(_fileName); InputStreamReader isr = new InputStreamReader(fis, "utf-8"); StringBuilder sb = new StringBuilder(); char[] charBuffer = new char[100]; int l = 0; while ((l = isr.read(charBuffer)) != -1) { sb.append(new String(charBuffer, 0, l)); } System.out.println(sb); } //字符流的写入 略
实际开发
在实际开发中,有许多优秀的I/O 库供我们使用,我们因此无需重复造轮子。
如: Apache.org 下 的commons包提供了对I/O 操作的封装。
因此: 学会使用第三方库可以大大提高我们的开发效率。
例:读取指定目录下的某种文件
public class GetMp3List { public static void main(String[] args) { listFiles("E:\\JavaWeb@JKXY", ".pdf"); } public static void listFiles(String _filePath, String suffix) { File dir = new File(_filePath); File[] files = dir.listFiles(); if (files != null) { for (File f : files) { if (f.isDirectory()) { listFiles(f.getAbsolutePath(), suffix); } if (f.getName().endsWith(suffix)) { System.out.println(f.getName()); } } } }}
输出结果示例:
23种设计模式 - v1.1.pdf
Eclipse 使用教程 - v1.0.pdf
IntelliJ_IDEA13基础教程.pdf
Java 中文乱码解决之道 - v1.0.pdf
Java 语言快速入门 - v1.0.pdf
Java 集合学习指南 - v1.1.pdf
MySQL 中文版 - v1.0.pdf
[MySQL核心技术手册(第二版)].(美)戴尔.扫描版.pdf
[算法(第四版).中文版.图灵程序设计丛书]Algorithms.-.Fourth.Edition.谢路云.影印版(高清)[www.ed2kers.com].pdf
《汪曾祺全集+3+散文卷》_北京师范大学出版社+19.pdf
《汪曾祺全集.1.小说卷》.pdf
书读完了 金克木.pdf
自然码双拼速成教学.pdf
._鲜花订购系统概要设计.pdf
鲜花订购系统概要设计.pdf
._商场VIP消费情况查询系统.pdf
商场VIP消费情况查询系统.pdf
Head First HTML与CSS、XHTML(中文版).pdf
javascript 权威指南(第6版).pdf
Java程序员面试宝典.pdf
Java面试宝典2016版.pdf
- JavaWeb入门(四) I-O
- 《深入分析JavaWeb技术内幕》读书笔记四.I/O调优
- I/O流类库(四)
- (四)Socket I/O模型之重叠I/O(overlapped I/O)
- JAVA的I/O操作(四)
- C#之I/O系统(四)
- java I/O流学习(四)
- I/O(四)ObjectStream
- Python入门(十)文件I/O
- Java I/O入门
- I/O模型入门
- 四种I/O模型
- 四、高级文件I/O
- Linux学习总结(四)——标准I/O与文件I/O
- C++的I/O(vc版)(四)
- Java I/O (四)缓冲流类
- I/O体系结构和设备驱动程序(四)
- Linux TCP 服务器编程(四):I/O复用
- 在Windows上安装Oracle数据库的必备文章
- 恢复IDEA中误删的文件
- shell脚本实现逻辑关系与、或、非
- 路由
- 原生node.js服务器搭建
- JavaWeb入门(四) I-O
- 第十章.巨幕页头缩略图和图文结合和警告框组件
- linux时间函数time和gettimeofday
- 关于iOS设备参数的获取
- java 字节码操作(javassist)
- 杨辉三角的变形【编程题】
- 百度地图 雷达/地理编码 功能使用
- 解决Python中格式化Dict对象时,中文为Unicode的问题
- MediaPlayer+TextureView实现小视频居中(不拉伸)播放