一、File类的使用
File类的使用
java.io.File类: 文件和文件目录路径的抽象表示形式,与平台无关
File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象, 可能没有一个真实存在的文件或目录
File对象可以作为参数传递给流的构造器
路径分隔符
windows:\
unix:/
常用方法
package com.caq.java; import org.junit.Test; import java.io.File; /** * File类的使用 * * 1.File类的一个对象,代表一个文件或一个文件目录 * 2.File类声明在java.io包下 * * * * */ public class FileDemo01 { /** 1.如何创建File类的实例 File(String pathname) File(String parent,String child) 2.相当路径:相较于某个路径下,指明的路径 绝对路径:包含盘符在内的文件或者文件夹的路径 3.路径分隔符 windows:\\ unix:/ */ @Test public void test1(){ /** public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果 pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。 绝对路径:是一个固定的路径,从盘符开始 相对路径:是相对于某个位置开始 public File(String parent,String child) 以parent为父路径,child为 子路径创建File对象。 public File(File parent,String child) 根据一个父File对象和子文件路径创建File对象 */ //构造器一 File f1 = new File("hello.txt");//相对于当前moudle File f2 = new File("D:\\Code\\he.txt");//加两个杠是因为不想让它进行转义 System.out.println(f1); System.out.println(f2); //构造器二 File f3 = new File("\\Code", "test"); System.out.println(f3); //构造器三 File f4 = new File(f3,"hello.txt"); System.out.println(f4); } }
二、IO流原理及流的分类
JavaIO原理
I/O是Input/Output的缩写,I/O技 术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等
Java程序中,对于数据的输入/输出操作以==“流(stream“==的方式进行
java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
输出output:将程序(内存) 数据输出到磁盘、光盘等存储设备中
流的分类
按操作数据单位不同分为:字节流(8bit),字符流(16bit)
字节就是一个byte(010101),常用来处理图片啊,视频啊之类的
一个一个的char(2个字节),常用来处理字符,比如文本之类的
按数据流的流向不同分为:输入流,输出流
输入:读取外部数据到内存中
输出:将内存中数据输出到磁盘,光盘等位置
按流的角色的不同分为:节点流,处理流
节点流:流直接作用在节点上
处理流:流作用在已有的流上的
流的分类
节点流和处理流
节点流 :直接从数据源或目的地读写数据
处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
InputStream & Reader
InputStream和Reader是所有输入流的基类
InputStream (典型实现: FileInputStream)
int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
Reader (典型实现: FileReader )
int read()
int read(char [] c)
int read(char 0 C, int off, int len)
程序中打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源
FileInputStream从文件系统中的某个文件中获得输入字节FileInputStream用于读取非文本数据之类的原始字节流。要读取字符流,需要使用FileReader
InputStream
int read()
从输入流中读取数据的下一个字节。返回0到255范围内的int字节值。如果因为己经到达流末尾而没有可用的字节,则返回值-1
int read(byte[] b)
从此输入流中将最多b.length 个字节的数据读入一个byte数组中。如果因为已经到达流末尾而没有可用的字节,则返回值-1。否则以整数形式返回实际读取的字节数。
int read(byte[] b, int off,int len)
将输入流中最多len 个数据字节读入byte 数组。尝试读取len个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。如果因为流位于文件末尾而没有可用的字节,则返回值-1。
public void close() throws lOException
关闭此输入流并释放与该流关联的所有系统资源
Reader
int read()
读取单个字符。作为整数读取的字符,范围在0到65535之间(0x00-0ffff (2个字节的Unicode码),如果已到达流的末尾,则返回-1
int read(char[] cbuf)
将字符读入数组。如果已到达流的末尾,则返回-1。否则返回本次读取的字符数。
int read(char[] cbuf,int off,int len)
将字符读入数组的某一部分。 存到数组cbuf中,从off处开始存储,最多读len个字符。如果已到达流的末尾,则返回-1。否则返回本次读取的字符数。
public void close() throws l0Exception
关闭此输入流并释放与该流关联的所有系统资源。
OutputStream & Writer
OutputStream
Writer