[关闭]
@mrbourne 2017-01-03T11:06:51.000000Z 字数 3279 阅读 1470

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() 文件的绝对路径

例:如何得到父级目录的绝对路径

  1. String parentAbsPath = new File(file.getAbsolutePath()).getParent();

canWrite() 文件可写性
canRead() 文件可读性
setReadable(true) 设置文件为可读
setWritable(false) 设置文件为不可写

文件的简单读写

读取方式
1. FileInputStream 文件数据输入为字节流
2. InputStreamReader 字节流到字符流的桥梁,从名称中也能看出这是InputStreamReader
3. BufferedReader 读取字符流的缓冲区。

例:

  1. public static void readFile(String _fileName) throws IOException {
  2. FileInputStream fis = new FileInputStream(_fileName);
  3. InputStreamReader isr = new InputStreamReader(fis);
  4. BufferedReader br = new BufferedReader(isr);
  5. String str;
  6. while ((str = br.readLine()) != null){
  7. System.out.println(str);
  8. }
  9. br.close(); //先关闭后打开的
  10. isr.close();
  11. fis.close();
  12. }

写入方式:
1. FileOutputStream 文件数据输出为字节流
2. OutputStreamWriter 字符流与字节流的桥梁
3. BufferedWriter 写入字符流缓冲区

字符流与字节流的区别

字节流通常以Stream 结尾,如文字,图片,流媒体(音视频),字节流以字节为单位对文件或其他输入进行读取。
字符流通常以Reader, Writer 结尾,它只能处理文本类型数据,它每次读取一个或多个字节,在去查询指定编码表如UTF-8然后返回字符。

如何使用字节流进行数据的读写?

利用FileInputStreamread()FileOutputStreamwrite 方法。

例:

  1. //字节流的读取
  2. public static void readInputStream(String _fileName) throws IOException {
  3. FileInputStream fis = new FileInputStream(_fileName);
  4. byte[] bytes = new byte[4]; //用来存放字节流
  5. ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
  6. int length = 0;
  7. while ((length =fis.read(bytes)) != -1){
  8. bos.write(bytes, 0, length);
  9. }
  10. System.out.println(new String(bos.toByteArray(), "utf-8"));
  11. fis.close();
  12. }
  13. //字节流的写入
  14. public static void writeOutputStream(String _fileName) throws IOException {
  15. FileOutputStream fos = new FileOutputStream(_fileName);
  16. fos.write("武都头,您里面请!".getBytes("utf-8"));
  17. }

注:

直接使用字符流进行读写

上面的例子我们是通过字节流的方式进去读取的,然后将读取的字节数组转为字符串。而借助InputStreamReaderOutputStreamWriter 我们可以直接读取字符流。

  1. //字符流的读取
  2. public static void readByInputStreamReader(String _fileName) throws IOException {
  3. FileInputStream fis = new FileInputStream(_fileName);
  4. InputStreamReader isr = new InputStreamReader(fis, "utf-8");
  5. StringBuilder sb = new StringBuilder();
  6. char[] charBuffer = new char[100];
  7. int l = 0;
  8. while ((l = isr.read(charBuffer)) != -1) {
  9. sb.append(new String(charBuffer, 0, l));
  10. }
  11. System.out.println(sb);
  12. }
  13. //字符流的写入 略

实际开发

在实际开发中,有许多优秀的I/O 库供我们使用,我们因此无需重复造轮子。
如: Apache.org 下 的commons包提供了对I/O 操作的封装。
因此: 学会使用第三方库可以大大提高我们的开发效率。

例:读取指定目录下的某种文件

  1. public class GetMp3List {
  2. public static void main(String[] args) {
  3. listFiles("E:\\JavaWeb@JKXY", ".pdf");
  4. }
  5. public static void listFiles(String _filePath, String suffix) {
  6. File dir = new File(_filePath);
  7. File[] files = dir.listFiles();
  8. if (files != null) {
  9. for (File f : files) {
  10. if (f.isDirectory()) {
  11. listFiles(f.getAbsolutePath(), suffix);
  12. }
  13. if (f.getName().endsWith(suffix)) {
  14. System.out.println(f.getName());
  15. }
  16. }
  17. }
  18. }
  19. }

输出结果示例:

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注