构造方法 | 解释 |
---|---|
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对象 |
方法 | 解释 |
---|---|
public String getAbsolutePath() | 获取绝对路径 |
public String getPath() | 获取路径 |
public String getName() | 获取名称 |
public String getParent() | 获取上层文件目录路径。若无,返回null |
public long length() | 获取文件长度(即:字节数)。不能获取目录的长度。 |
public long lastModified() | 获取最后一次的修改时间,毫秒值 |
public String[] list() | 获取指定目录下的所有文件或者文件目录的名称数组 |
public File[] listFiles() | 获取指定目录下的所有文件或者文件目录的File数组 |
public boolean renameTo(File dest) | 把文件重命名为指定的文件路径 |
public boolean isDirectory() | 判断是否是文件目录 |
public boolean isFile() | 判断是否是文件 |
public boolean exists() | 判断是否存在 |
public boolean canRead() | 判断是否可读 |
public boolean canWrite() | 判断是否可写 |
public boolean isHidden() | 判断是否隐藏 |
public boolean createNewFile() | 创建文件。若文件存在,则不创建,返回false |
public boolean mkdir() | 创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建 |
public boolean mkdirs() | 创建文件目录。如果上层文件目录不存在,一并创建 |
public boolean delete() | 删除文件或者文件夹 |
JAVA的节点流和处理流
(抽象基类) | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArraylnputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOuputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectlnputStream | ObjectOutputStream | ||
- | FilternputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbacklnputStream | PushbackReader | ||
特殊流 | DatalnputStream | DataOutputStream |
显式关闭文件IO资源
方法 | 解释 |
---|---|
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 IOException | 关闭此输入流并释放与该流关联的所有系统资源 |
方法 | 解释 |
---|---|
int read() | 读取单个字符。作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff)(2个字节的Unicode码),如果已到达流的末尾,则返回-1 |
int read(char[] cbuf) | 将字符读入数组。如果已到达流的末尾,则返回 -1。否则返回本次读取的字符数 |
int read(char[] cbuf,int off,int len) | 将字符读入数组的某一部分。存到数组cbuf中,从off处开始存储,最多读len个字符。如果已到达流的末尾,则返回-1。否则返回本次读取的字符数 |
public void close() throws IOException | 关闭此输入流并释放与该流关联的所有系统资源 |
方法 | 解释 |
---|---|
void write(int b) | 将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数b 的八个低位。b 的24 个高位将被忽略。即写入0~255范围的 |
void write(byte[] b) | 将b.length 个字节从指定的byte 数组写入此输出流。write(b) 的常规协定是:应该与调用write(b, 0, b.length) 的效果完全相同 |
void write(byte[] b,int off,int len) | 将指定byte 数组中从偏移量off 开始的len 个字节写入此输出流 |
public void flush()throws IOException | 刷新此输出流并强制写出所有缓冲的输出字节,调用此方法指示应将这些字节立即写入它们预期的目标 |
public void close() throws IOException | 关闭此输出流并释放与该流关联的所有系统资源 |
方法 | 解释 |
---|---|
void write(int c) | 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。 即写入0 到65535 之间的Unicode码 |
void write(char[] cbuf) | 写入字符数组 |
void write(char[] cbuf,int off,int len) | 写入字符数组的某一部分。从off开始,写入len个字符 |
void write(String str) | 写入字符串 |
void write(String str,int off,int len) | 写入字符串的某一部分 |
void flush() | 刷新该流的缓冲,则立即将它们写入预期目标 |
public void close() throws IOException | 关闭此输出流并释放与该流关联的所有系统资源 |
FileReader fr = null; try { // 建立一个流对象,将已存在的一个文件加载进流 fr = new FileReader(new File("c:\\test.txt")); // 创建一个临时存放数据的数组 char[] buf = new char[1024]; int len; // 调用流对象的读取方法将流中的数据读入到数组中 while ((len = fr.read(buf)) != -1) { System.out.print(new String(buf, 0, len)); } } catch (IOException e) { System.out.println("read-Exception :" + e.getMessage()); } finally { if (fr != null) { try { // 关闭资源 fr.close(); } catch (IOException e) { System.out.println("close-Exception :" + e.getMessage()); }}}
FileWriter fw = null; try { // 创建流对象,建立数据存放文件 fw = new FileWriter(new File("Test.txt")); // 调用流对象的写入方法,将数据写入流 fw.write("atguigu-songhongkang"); } catch (IOException e) { e.printStackTrace(); } finally { if (fw != null) try { // 关闭流资源,并将流中的数据清空到文件中 fw.close(); } catch (IOException e) { e.printStackTrace(); } }
public class BufferedInputStream extends FilterInputStream { private static int DEFAULT_BUFFER_SIZE = 8192; }
BufferedReader br = null; BufferedWriter bw = null; try { // 创建缓冲流对象:它是处理流,是对节点流的包装 br = new BufferedReader(new FileReader("d:\\IOTest\\source.txt")); bw = new BufferedWriter(new FileWriter("d:\\IOTest\\dest.txt")); String str; while ((str = br.readLine()) != null) { // 一次读取字符文本文件的一行字符 bw.write(str); // 一次写入一行字符串 bw.newLine(); // 写入行分隔符 } bw.flush(); // 刷新缓冲区 } catch (IOException e.printStackTrace(); } finally {// 关闭IO流对象try {if (bw != null) { bw.close(); // 关闭过滤流时,会自动关闭它所包装的底层节点流 } } catch (IOException e) { e.printStackTrace(); } try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace();}}
构造器 | 解释 |
---|---|
public InputStreamReader(InputStream in) | |
public InputSreamReader(InputStream in,String charsetName) | Reader isr = new InputStreamReader(System.in,”gbk”); |
构造器 | 解释 |
---|---|
public OutputStreamWriter(OutputStream out) | |
public OutputSreamWriter(OutputStream out,String charsetName) |
public void testMyInput() throws Exception { FileInputStream fis = new FileInputStream("dbcp.txt"); FileOutputStream fos = new FileOutputStream("dbcp5.txt"); InputStreamReader isr = new InputStreamReader(fis, "GBK"); OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK"); BufferedReader br = new BufferedReader(isr); BufferedWriter bw = new BufferedWriter(osw); String str = null; while ((str = br.readLine()) != null) { bw.write(str); bw.newLine(); bw.flush(); } bw.close(); br.close(); }
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表
常见的编码表
ASCII:美国标准信息交换码,一个字节的7位可以表示
ISO8859-1:拉丁码表,欧洲码表,一个字节的8位表示
GB2312:中国的中文编码表,最多两个字节编码所有字符
GBK:中国的中文编码表升级,最多两个字节编码
Unicode:国际标准码,所有的文字都用两个字节来表示
UTF-8:变长的编码方式,用1-4个字节来表示一个字符
Unicode只是定义了一个庞大的、全球通用的字符集,并为每个字符规定了唯一确定的编号,具体存储成什么样的字节流,取决于字符编码方案
编码:字符串→字节数组
解码:字节数组→字符串
转换流的编码应用
可以将字符按指定编码格式存储
可以对文本数据按指定编码格式来解读
指定编码表的动作由构造器完成
ObjectInputStream和OjbectOutputSteam
用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来
序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本类型数据或对象的机制
ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
//序列化:将对象写入到磁盘或者进行网络传输 //要求对象必须实现序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“data.txt")); Person p = new Person("韩梅梅", 18, "中华大街", new Pet()); oos.writeObject(p); oos.flush(); oos.close(); //反序列化:将磁盘中的对象数据源读出 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“data.txt")); Person p1 = (Person)ois.readObject(); System.out.println(p1.toString()); ois.close();
构造器 | 解释 |
---|---|
public RandomAccessFile(File file, String mode) | |
public RandomAccessFile(String name, String mode) |
// 以前IO操作 import java.io.File; File file = new File("index.html"); // Java7 import java.nio.file.Path; import java.nio.file.Paths; Path path = Paths.get("index.html");
Path常用方法 | 解释 |
---|---|
String toString() | 返回调用 Path 对象的字符串表示形式 |
boolean startsWith(String path) | 判断是否以 path 路径开始 |
boolean endsWith(String path) | 判断是否以 path 路径结束 |
boolean isAbsolute() | 判断是否是绝对路径 |
Path getParent() | 返回Path对象包含整个路径,不包含 Path 对象指定的文件路径 |
Path getRoot() | 返回调用 Path 对象的根路径 |
Path getFileName() | 返回与调用 Path 对象关联的文件名 |
int getNameCount() | 返回Path 根目录后面元素的数量 |
Path getName(int idx) | 返回指定索引位置 idx 的路径名称 |
Path toAbsolutePath() | 作为绝对路径返回调用 Path 对象 |
Path resolve(Path p) | 合并两个路径,返回合并后的路径对应的Path对象 |
File toFile() | 将Path转化为File类的对象 |
Files常用方法 | 解释 |
---|---|
Path copy(Path src, Path dest, CopyOption … how) | 文件的复制 |
Path createDirectory(Path path, FileAttribute<?> … attr) | 创建一个目录 |
Path createFile(Path path, FileAttribute<?> … arr) | 创建一个文件 |
void delete(Path path) | 删除一个文件/目录,如果不存在,执行报错 |
void deleteIfExists(Path path) | Path对应的文件/目录如果存在,执行删除 |
Path move(Path src, Path dest, CopyOption…how) | 将 src 移动到 dest 位置 |
long size(Path path) | 返回 path 指定文件的大小 |
boolean exists(Path path, LinkOption ...opts) | 判断文件是否存在 |
boolean isDirectory(Path path, LinkOption ...opts) | 判断是否是目录 |
boolean isRegularFile(Path path, LinkOption ...opts) | 判断是否是文件 |
boolean isHidden(Path path) | 判断是否是隐藏文件 |
boolean isReadable(Path path) | 判断文件是否可读 |
boolean isWritable(Path path) | 判断文件是否可写 |
boolean notExists(Path path, LinkOption ...opts) | 判断文件是否不存在 |
SeekableByteChannel newByteChannel(Path path, OpenOption …how) | 获取与指定文件的连接,how 指定打开方式 |
DirectoryStream<Path> newDirectoryStream(Path path) | 打开 path 指定的目录 |
InputStream newInputStream(Path path, OpenOption …how) | 获取InputStream对象 |
OutputStream newOutputStream(Path path, OpenOption …how) | 获取OutputStream对象 |
1.谈谈你对java.io.Serializable接口的理解,我们知道它用于序列化,是空方法接口,还有其它认识吗?