1. 简介

之前的程序,数据都存储在内存中,一旦运行结束,数据消失。

数据持久化存储:将内存中的数据存储到内存以外的持久化设备中(硬盘,光盘、U盘等)。

OS中,数据都保存文件存放在相应的文件夹。

集合只能在内存中临时存储数据,要长期存储需要用到IO流。

1.1 IO

输出(写)output:需把内存中的数据存储到持久化设备中

输入(读)input:把持久化设备上的数据读到内存中

1.2 Java IO流

流可被看做一组有序的字节集合,本质是数据传输,根据处理数据类型的不同,流可分为:

  • 字节流:以字节(8 bit)为单位,包含两个抽象类:

    1. InputStream(输入流)
    2. OutputStream(输出流)
  • 字符流:以字符(16 bit)为单位,根据码表映射字符,一次可以读多个字节,包含两个抽象类:
    1. Reader(输入流)
    2. Writer(输出流)

字节流在处理输入输出时不会用到缓存,而字符流用到了缓存。

流向        
  输入流 读数据 FileReader Reader
  输出流 写数据 FileWriter Writer
数据类型        
  字节流      
    字节输入流 读数据 InputStream
    字节输出流 写数据 OutputStream
  字符流      
    字符输入流 读数据 Reader
    字符输出流 写数据 Writer

JavaIO设计时采用了Decorator(装饰者)设计模式。

其中ByteArrayInputStream、StringBufferInputStream、FileInputStream和PipedInputStream是Java提供的最基本的对流进行处理的类。

FilterInputStream为一个封装类的基类,可以对基本的IO类进行封装。

使用这种设计模式好处:可以在运行时动态地给对象添加一些额外的职责,与使用继承的设计方法相比该方法具有很好的灵活性。

2. File类

io包中

File类的实例不可改变

它是File文件和目录路径名的抽象表示。Java中,把文件或目录(文件夹)都封装成了File对象。

2.1 创建File对象

用构造函数

File(String pathname):将指定的路径名转换为一个File对象

File(String parent,String child):根据指定的父路径和文件名(文件路径)创建File对象

File(File parent,String child):根据父路径对象和文件路径创建对象

String pathName="e:\\java_code\\hello.java";
File f1=new File(pathName);
//创建了一个File对象f1指向了一个路径;
//若hello.java存在,不会创建它只是指向路径File f2=new File("e:\\java_code\\hello.java");File dir=new File("e:\\java_code");
File f3=new File(dir,"hello.java");

2.2 常用方法

1、获取文件的绝对路径,即全路径:getAbsolutePath()

String abspath=f1.getAbsolutePath();
  • 绝对路径:以盘符开头,固定,不可改变的路径
  • 相对路径:不能以盘符开头,相对某个参照物的。在eclipse中相对于当前项目的根目录,与src平级。

2、获取File封装的路径:getPath()

String path=f1.getPath();

3、获取文件名称和文件夹名称:getName()

String fileName=f1.getName();

4、获取文件大小(字节数):length()——bytes

long size=fi.length();

2.3 File类操作

File file=new File("e:\\file.txt");

1、创建文件:createNewFile()

  • 若文件不存在,创建,返回true
  • 若文件存在,不创建,返回false
  • 路径错误,IOException
boolean b1=file.createNewFile();

2、删除文件夹(不去回收站):delete()

boolean b2=file.delete();

3、判断文件是否存在:exists()

boolean b3=file.exists();

4、对目录的操作

①创建单个目录:mkdir()

File dir=new File("e:\\abd");
boolean b4=dir.mkdir();

和createFile()类似。

②创建多个目录:mkdirs()

File dir=new File("a\\b\\c");
boolean b5=dir.mkdirs();

"a\\b\\c"父路径不存在时也会创建

③删除:delete()

boolean b5=dir.delete();

只有将目录中的内容都删除,保证目录为空,才能删除此目录。

5、判断时文件还是目录

file.exists();
file.isFile();
file.isDictionary();

以上三个方法都返回的是boolean值。

6、获取目录下的当前文件以及文件夹的名字:list()

File dir=new File("e:\\java");
String[] names=dir.list();
for(String name:names){System.out.println(name);
}

7、获取目录下当前文件以及文件对象:listFiles()

File[] files=dir.listFiles();
for(File file:files){System.out.println(file);
}

注:6、7中,获取时需确定目录存在,而且指定的必须是目录。

否则易返回null,出现NullPointerException

IO-1(Java IO、File类)相关推荐

  1. file数组 删除文件_java编程IO基础之一:File类

    在整个java.io包中,File类是唯一的一个与文件本身操作有关的类,既可以执行文件的创建.删除.重命名,取得文件大小和修改日期. File的构造函数: public File(String pat ...

  2. 手把手带你入门Java中File类

    零基础学习Java之File类 概述 构造方法 基本介绍 代码示例 常用方法 获取文件和目录的基本信息 代码示例 判断功能 代码示例 创建和删除功能 代码示例 目录遍历功能 代码示例 概述 要学习Ja ...

  3. Java之File类

    一.初见File类 java.io.File类代表系统中的文件(文件或目录) 常用构造方法 File(String pathname) File(String parent, String child ...

  4. java基础---File类

    package com.henu.io; /** ????????????????* 提出问题,当File创建文件后,为什么在磁盘中找不到,即file.exists返回false,* 当你在磁盘中创建 ...

  5. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  6. Java 通过File类的listFiles()遍历文件夹

    #博学谷IT学习技术支持# 首先我们看下File类的listFiles()的源码: public File[] listFiles() {String[] ss = list(); //用ss存放子文 ...

  7. java io ioexception,java.io.IOException

    catch(java.io.IOException e){ ECLIPSE下LWUIT问题啊??java.lang.ClassNotFoundException'>java.lang.Class ...

  8. Java中File类之createNewFile、mkdirs

    Java中File类 1. 概述 2. mkdirs与mkdir区别 2.1 基本概念 2.2 程序实例 3. createNewFile 3.1 基本概念 3.2 程序范例 1. 概述 File 对 ...

  9. java.io.eof_java.io.IOException: java.io.EOFException: Unexpected end of input stream错误

    报错现象: Diagnostic Messages for this Task: Error: java.io.IOException: java.io.EOFException: Unexpecte ...

  10. java getabsolutepath,详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    简单看一下描述,例子最重要. 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 返回绝对路径,但不会处理"."和".."的情况 ...

最新文章

  1. JQuery笔记(一)
  2. 深入理解gradle中的task
  3. 数据结构-栈在括号匹配中的应用
  4. 垃圾收集算法,垃圾收集器_弱,弱,最弱,利用专家参考来管理垃圾收集器
  5. 【软件架构】三层架构和MVC的比较
  6. 数字图像处理(四)——图像编码技术(二)
  7. smarty 模板 php,PHP smarty模板
  8. 使用Mybatis拦截器实现数据分表
  9. android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
  10. 分享四个一键生成神器:Logo、App、小程序、H5等五分钟快速搞定
  11. 【angular5】浅谈angular5与serviceWorker——(2)
  12. Redux和react-redux的区别是什么?
  13. 本地配置多个git账户(公司、GitHub)
  14. 深入Spring Boot: 怎样排查 java.lang.ArrayStoreException
  15. C/C++头文件汇总
  16. jsp中的文件操作(一)
  17. SAS 年月日时分秒转年月日
  18. 《从祖先到算法—加速进化的人类文化》简评
  19. 万能表单解析工具在xheditor上传文件中的应用
  20. flex结合Lcds整合spring

热门文章

  1. lintcode:排颜色 II
  2. HTML5 WebSockets学习
  3. jQuery应用之(二)使用jQuery管理选择结果(荐)
  4. 【Linux】gcc -o 什么意思
  5. %matplotlib inline 是什么意思
  6. WPF实现雷达图(仿英雄联盟)
  7. ThreadLocal基本使用和内存泄漏分析
  8. 一篇文章弄懂Java反射基础和反射的应用场景
  9. helm离线安装helm-push插件
  10. kafka发送及消费消息示例