Java学习——day 15
2019-01-12 本文已影响0人
振礼硕晨
主要内容
- File类
- IO流
笔记详情
1. File类
File对象是系统中文件和目录路径名的抽象表示形式。一个File类对象可以代表一个文件和目录,但不是完全对应的。建立File对象不会对系统中的文件和目录带来影响。
我们知道在系统中有文件和目录,如果我们想要在程序中操作这些文件和目录,那么就需要这些文件和目录在程序中有一个对应的抽象形式。这个时候我们就可以创建File对象,在程序中创建文件和目录的抽象形式。
我们还需要注意一点,无论这些文件和目录是否真实存在,都可以在程序中创建File对象,关联该文件和目录,系统不会报错。
下面就列出一些File类对象的常用方法:
创建File对象的方法
File file01 = new File(new File("D:/java"),"fengzhen.jpg"); // File(File parent, String child)
File file02 = new File("D:/java/fengzhen.jpg"); // File(String pathname)
File file03 = new File("D:/java","fengzhen.jpg"); // File(String parent, String child)
File file04 = new File("www.baidu.com/fengzhen.jpg"); // File(URI uri)
文件名的相关方法
方法 | 方法简介 |
---|---|
getName() |
文件名 |
getPath() |
路径名,如果是绝对路径,返回绝对路径名;否则返回相对路径名 |
getAbsolutePath() |
绝对路径名 |
getAbsoluteFile() |
绝对路径对应的File对象 |
getParent() |
返回相对路径的父目录,有可能为null |
判断信息的相关方法
方法 | 方法简介 |
---|---|
exists() |
File对象关联的文件是否存在 |
canWrite() |
File对象关联的文件是否可写 |
canWrite() |
File对象关联的文件是否可读 |
isFile() |
File对象关联的文件是否为文件 |
isDirectory() |
File对象关联的文件是否为文件夹 |
isAbsolute() |
File对象关联的文件是否具有跨平台,win系统以盘符开头,其他系统以/开头 |
长度、创建和删除的相关方法
方法 | 方法简介 |
---|---|
length() |
如果文件存在,返回以字节表示的文件大小;如果文件不存在,返回0 |
createNewFile() |
文件不存在,创建爱你对应的文件,主要要进行捕获异常 |
delete() |
删除文件 |
createTempFile(String prefix,String suffix,File directory) |
创建临时文件 |
deleteOnExit() |
删除临时文件 |
exists() |
下面给出实例:
public static void main(String[] args) {
// 创建文件
if (!file01.exists()) {
try {
file01.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 删除文件
if (!file01.exists()) {
file01.delete();
}
// 创建临时文件
File temp = null;
try {
temp = File.createTempFile("fen", ".temp", new File("C:/Users/Administrator/Desktop"));
} catch (IOException e) {
e.printStackTrace();
}
// 删除临时文件
try {
Thread.sleep(5000);
temp.deleteOnExit();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
目录操作的相关方法
方法 | 方法简介 |
---|---|
mkdir() |
创建对应的文件夹,上级目录一定要存在,否则会报错 |
mkdirs() |
常见对应的文件夹,如果上级目录不存在,则常见多级目录 |
list() |
返回该目录下,文件及文件夹的字符串数组 |
listFiles() |
返回该目录下,文件及文件夹对应的File对象 |
static listRoots() |
返回系统之的根目录:win系统返回所有的盘符 |
2. IO流的介绍
流即流动、流向,从一段流向另外一段。在Java程序中,对于数据的输入/输出操作是以“流”方式进行的。JDK提供了各种各样的“流”类用以获取不同种类的数据。下面介绍一下IO流的分类:
根据流向分,可以分为输入流和输出流;
根据数据分,可以分为字节流和字符流:字节流针对的是二进制文件,可以处理一切文件,包括纯文本、doc、音频、视频等等;字符流针对的是文本文件,只能处理纯文本。
根据功能分,可以分为节点流和处理流。节点流包括源头,处理流可以增强功能,提供性能。
在IO流中,使用最多的是字节流和字符流。字节流中有 输入流(InputStream) 和输出流 (OutputStream) ,字符流中也有输入流 (Reader) 和输出流 (Writer) 。
使用IO流在处理文件的时候,一般的思路如下:
- 读取文件
- 建立与文件的联系
- 选择对应的流
- 读取文件/写出文件
- 释放资源
下面给出一个文件读取的实例:使用字节流的形式,读取文件中的内容:
import java.io.*;
public class Demo03 {
public static void main(String[] args) {
File fileTxt = new File("src/file/test.txt");
InputStream is = null;
try {
is = new FileInputStream(fileTxt);
byte[] car = new byte[100]; // 定义每次读取的字节长度
int length; // 表示每次读取的实际大小,用于判断是否继续进行读取
while ((length = is.read(car)) != -1) {
System.out.println(new String(car));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到");
} catch (IOException e) {
System.out.println("文件读取失败");
} finally { // 最后,关闭文件输入流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件关闭失败");
}
}
}
}
}
下面给出一个写出文件的实例:
import java.io.*;
public class Demo04 {
public static void main(String[] args) {
File fileTxt = new File("src/file/feng.txt");
OutputStream os = null;
try {
os = new FileOutputStream(fileTxt);
String content = new String("坚定目标,永不放弃!");
byte[] data = content.getBytes();
os.write(data, 0, data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件写出失败");
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件关闭失败");
}
}
}
}
}