JavaWeb入门(四) I-O

原创 2017年01月03日 19:08:28

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 字节流到字符流的桥梁,从名称中也能看出这是InputStreamReader
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然后返回字符。

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

利用FileInputStreamread()FileOutputStreamwrite 方法。

例:

    //字节流的读取
    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"));
    }

注:

  • 这里是利用FileInputStreamread() 的方法直接读入一个byte 数组中,然后再将这个byte 数组转为字符串。
  • 这个length 是非常重要的,它记录了每次实际读入byte 数组中的字节个数。如何不考虑这点,可能会产生乱码。
  • 同理,可利用FileOutputStreamwrite() 的方法写入一个byte 数组。

直接使用字符流进行读写

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

    //字符流的读取
    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

版权声明:Copyright@ Robert Ford | Contact : mrbourne@163.com

JavaWeb学习总结(四)——服务器

一、打包JavaWeb应用   在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:    范例:将JavaWebDemoProject...
  • zw901159
  • zw901159
  • 2016年05月13日 19:30
  • 293

四轴飞行diy全套入门教程(从最基础的开始)

首先声明本人也是菜鸟,此教程就是从一个菜鸟的角度来讲解,现在论坛上的帖子都突然冒很多名词出来,又不成体系,我自己开始学的时候往往一头雾水,相信很多新手也一样。所以在这个帖子里面,我都会把自己遇到的疑惑...
  • J_1234567890
  • J_1234567890
  • 2016年07月07日 15:15
  • 7210

I-O 端口和 I-O 内存

在驱动程序编写过程中,很少会注意到IO Port和IO Mem的区别。虽然使用一些不符合规范的代码可以达到最终目的,这是极其不推荐使用的。 结合下图,我们彻底讲述IO端口和IO内存以及内存之间的...
  • jiangbo_wei
  • jiangbo_wei
  • 2013年08月09日 13:54
  • 481

树莓派入门(四)

树莓派的使用无法离开网络,如果没有网络,建议大家洗洗睡吧,没有网路就不要玩树莓派了~ 1、有线网络:     1)自动获取IP:树莓派默认有线网卡是使能的,只需将网线插入树莓派...
  • frank_wu
  • frank_wu
  • 2015年11月23日 00:13
  • 1318

JavaWeb学习总结(一)——JavaWeb开发入门

一、基本概念 1.1、WEB开发的相关知识   WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。   Internet上供外界访问的Web资源分...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年07月28日 07:34
  • 11527

I-O 端口和 I-O 内存

在驱动程序编写过程中,很少会注意到IO Port和IO Mem的区别。虽然使用一些不符合规范的代码可以达到最终目的,这是极其不推荐使用的。 结合下图,我们彻底讲述IO端口和IO内存以及内存之间的关系...
  • chinazhangzhong123
  • chinazhangzhong123
  • 2016年06月05日 23:40
  • 156

JavaWeb入门经典实例

综述:这篇文章主要从一个小小的实例出发,对JavaWeb的开发做入门讲解,非常适合初学JavaWeb的人,入门者可飘过。       实例开发技术包括jsp、jstl、servlet、javabea...
  • luohuaishao
  • luohuaishao
  • 2014年06月18日 20:51
  • 1834

JavaWeb开发入门(二)

web应用程序web应用程序指供浏览器访问的程序,通常也简称为web应用。 web应用:例如有a.html 、b.html…..多个web资源,这多个web资源用于对外提供邮件服务,此时应把这多个w...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年07月06日 08:30
  • 1621

I-O 端口和 I-O 内存

http://www.360doc.com/content/11/0311/15/5169677_100219449.shtmlhttp://blog.chinaunix.net/space.php?...
  • ztguang
  • ztguang
  • 2016年03月30日 10:29
  • 216

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)

昨天给这个系列开了一个头,那么,今天继续吧。 3.4 登陆和注册按钮 导航栏已经做好了,那么一般来说,在标题栏的最右边就是登陆和注册按钮。 div class='login'> ...
  • g19881118
  • g19881118
  • 2017年02月21日 08:55
  • 651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaWeb入门(四) I-O
举报原因:
原因补充:

(最多只允许输入30个字)