黑马程序员技术交流社区
标题: 【石家庄校区】Javaweb学习笔记干货 [打印本页]
作者: 859182973 时间: 2018-12-17 09:42
标题: 【石家庄校区】Javaweb学习笔记干货
本帖最后由 小石姐姐 于 2018-12-19 15:49 编辑
File类
java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
抽象?abstract
java.io.File类
文件和目录路径名的抽象表示形式。
java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作
我们可以使用File类的方法
创建一个文件/文件夹
删除文件/文件夹
获取文件/文件夹
判断文件/文件夹是否存在
对文件夹进行遍历
获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法
重点:记住这三个单词
file:文件
directory:文件夹/目录
path:路径
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。
static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符。
操作路径:路径不能写死了
C:\develop\a\a.txt windows
C:/develop/a/a.txt linux
"C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);//路径分隔符 windows:分号; linux:冒号:
String separator = File.separator;
System.out.println(separator);// 文件名称分隔符 windows:反斜杠\ linux:正斜杠/
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
第一个构造方法
参数:
String pathname:字符串的路径名称[HTML] 纯文本查看 复制代码
private static void show01() {
File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
System.out.println(f1);//重写了Object类的toString方法 C:\Users\itcast\IdeaProjects\shungyuan\a.txt
File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
System.out.println(f2);//C:\Users\itcast\IdeaProjects\shungyuan
File f3 = new File("b.txt");
System.out.println(f3);//b.txt
路径可以是以文件结尾,也可以是以文件夹结尾
路径可以是相对路径,也可以是绝对路径
路径可以是存在,也可以是不存在
创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
第二个构造方法
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
参数:把路径分成了两部分
String parent:父路径
String child:子路径
好处:
父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
[HTML] 纯文本查看 复制代码
private static void show02(String parent, String child) {
File file = new File(parent,child);
System.out.println(file);
}
show02("c:\\","a.txt");//c:\a.txt
show02("d:\\","a.txt");//d:\a.txt
第三个构造方法
[HTML] 纯文本查看 复制代码
show03();
private static void show03() {
File parent = new File("c:\\");
File file = new File(parent,"hello.java");
System.out.println(file);//c:\hello.java
}
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
参数:把路径分成了两部分
File parent:父路径
String child:子路径
好处:
父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
}
获取功能的方法File类获取功能的方法
- public String getAbsolutePath() :返回此File的绝对路径名字符串。
- public String getPath() :将此File转换为路径名字符串。
- public String getName() :返回由此File表示的文件或目录的名称。
- public long length() :返回由此File表示的文件的长度。
public String getAbsolutePath() :
返回此File的绝对路径名字符串。
public String getAbsolutePath() :返回此File的绝对路径名字符串。
获取的构造方法中传递的路径
无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径
[HTML] 纯文本查看 复制代码
private static void show01() {
File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
String absolutePath1 = f1.getAbsolutePath();
System.out.println(absolutePath1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txtFile f2 = new File("a.txt");
String absolutePath2 = f2.getAbsolutePath();
System.out.println(absolutePath2);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
}
- public String getPath() :
将此File转换为路径名字符串。
public String getPath() :将此File转换为路径名字符串。
获取的构造方法中传递的路径
toString方法调用的就是getPath方法
源码:
[HTML] 纯文本查看 复制代码
public String toString() {
return getPath();
}
private static void show02() {
File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
File f2 = new File("a.txt");
String path1 = f1.getPath();
System.out.println(path1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
String path2 = f2.getPath();
System.out.println(path2); //a.txt
System.out.println(f1);
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
System.out.println(f1.toString());
//C:\Users\itcast\IdeaProjects\shungyuan\a.txt
}
public String getName() :
返回由此File表示的文件或目录的名称。
public String getName() :返回由此File表示的文件或目录的名称。
获取的就是构造方法传递路径的结尾部分(文件/文件夹)
[HTML] 纯文本查看 复制代码
private static void show03() {
File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\a.txt");
String name1 = f1.getName();
System.out.println(name1); //a.txt
File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan");
String name2 = f2.getName();
System.out.println(name2); //shungyuan
}
public long length() :
返回由此File表示的文件的长度。
public long length() :返回由此File表示的文件的长度。
获取的是构造方法指定的文件的大小,以字节为单位
注意:
文件夹是没有大小概念的,不能获取文件夹的大小
如果构造方法中给出的路径不存在,那么length方法返回0
[HTML] 纯文本查看 复制代码
private static void show04() {
File f1 = new File("C:\\develop\\a\\1.jpg");
long l1 = f1.length();
System.out.println(l1); //780831字节
File f2 = new File("C:\\develop\\a\\2.jpg");
System.out.println(f2.length()); //0
File f3 = new File("C:\\develop\\a");
System.out.println(f3.length());
//0 文件夹没有大小概念的
}
演示
方法演示,代码如下:
[HTML] 纯文本查看 复制代码
public class FileGet {
public static void main(String[] args) {
File f = new File("d:/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("文件构造路径:"+f.getPath());
System.out.println("文件名称:"+f.getName());
System.out.println("文件长度:"+f.length()+"字节");
File f2 = new File("d:/aaa");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录构造路径:"+f2.getPath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录长度:"+f2.length());
}
}
输出结果:
文件绝对路径:d:\aaa\bbb.java
文件构造路径:d:\aaa\bbb.java
文件名称:bbb.java
文件长度:636字节
目录绝对路径:d:\aaa
目录构造路径:d:\aaa
目录名称:aaa
目录长度:4096
java.io.File类: 文件和目录的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
静态成员变量
static String pathSeparator: 路径分隔符的字符串形式
static char pathSeparatorChar: 路径分隔符的char形式
Windows系统是 分号;
Linux系统是 冒号:
static String separator: 文件名称分隔符的字符串形式
static char separatorChar: 文件名称分隔符的char形式
Window系统是 反斜杠\
Linux系统是 正斜杠/
构造方法(创建了File对象, 并将其指向该路径. 不会真正在磁盘上创建这个文件)
File File(String pathname): 根据 路径字符串 封装一个File对象
File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象
File File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File对象
常用获取方法
String?getAbsolutePath(): 返回此File的绝对路径名字符串
String?getPath(): 获取File对象的封装路径 (创建对象时传入的路径)
String?getName(): 获取File对象的文件名或目录名
long?length(): 获取File表示的文件大小的字节数 (不能获取目录的大小)
常用判断方法
boolean?exists(): 判断File对象代表的文件或目录是否实际存在
boolean?isDirectory(): 判断File表示的是否为目录
boolean?isFile(): 判断File表示的是否为文件
常用创建删除方法
boolean?createNewFile(): 当文件不存在时, 创建一个新的空文件
boolean?delete(): 删除由此File表示的文件或目录. (删除目录时必须是空目录)
boolean?mkdir(): 创建File表示的目录
boolean?mkdirs(): 创建File表示的多级目录
常用获取目录中内容的方法
String[]?list(): 获取当前File目录下的所有子文件或目录的名字数组
File[]?listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组
File[] listFiles(FileFilter filter): 通过File对象过滤, 返回文件过滤器过滤后的File对象数组
File[] listFiles(FilenameFilter filter): 通过File对象的文件名过滤, 返回文件过滤器过滤后的File对象数组
java.io.FileFilter接口: 用于File对象的过滤器
boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入
java.io.FilenameFilter接口:
boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
File类遍历(文件夹)目录功能
- public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
- public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
注意:
list方法和listFiles方法遍历的是构造方法中给出的目录
如果构造方法中给出的目录的路径不存在,会抛出空指针异常
如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有的文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中
[HTML] 纯文本查看 复制代码
File f9 = new File("src\\PhaseTwo\\day8\\上午\\demo");
String[] list = f9.list();
for (String s : list) {
System.out.println(s);
}
File[] files = f9.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
"." 或者".."或者"src\\PhaseTwo\\day8\\上午\\demo"
File f9 = new File(".");
String[] list = f9.list();
for (String s : list) {
System.out.println(s);
}
File[] files = f9.listFiles();
for (File file1 : files) {
System.out.println(file1)
}
;
File类判断功能的方法
- public boolean exists() :此File表示的文件或目录是否实际存在。
- public boolean isDirectory() :此File表示的是否为目录。
- public boolean isFile() :此File表示的是否为文件。
public boolean isDirectory() :此File表示的是否为目录。
用于判断构造方法中给定的路径是否以文件夹结尾
是:true
否:false
public boolean isFile() :此File表示的是否为文件。
用于判断构造方法中给定的路径是否以文件结尾
是:true
否:false
注意:
电脑的硬盘中只有文件/文件夹,两个方法是互斥
这两个方法使用前提,路径必须是存在的,否则都返回false
//不存在,就没有必要获取
此File表示的文件或目录是否实际存在。
用于判断构造方法中的路径是否存在
存在:true
不存在:false
//此File表示的是否为目录。 ("D:\\飞秋\\03-飞秋 (资料共享件).exe")
System.out.println(file.isDirectory());// false
//此File表示的文件或目录是否实际存在("D:\\飞秋\\03-飞秋 (资料共享件).exe")
System.out.println(file.exists());// true
//此File表示的是否为文件。 ("D:\\飞秋\\03-飞秋 (资料共享件).exe")
System.out.println(file.isFile());// true
if判断语句
//判断file文件或目录是否实际存在。存在的话就打印输出
[HTML] 纯文本查看 复制代码
if (file.exists()){
System.out.println(file.isDirectory());// false
System.out.println(file.exists());// true
System.out.println(file.isFile());// true
}
//判断file是否为目录。存在的话就打印输出
[HTML] 纯文本查看 复制代码
if (file.isDirectory()){
System.out.println(file.isDirectory());// false
System.out.println(file.exists());// true
System.out.println(file.isFile());// true
}
//判断file表示的是否为文件。是文件就打印输出
[Java] 纯文本查看 复制代码
if (file.isFile()){
System.out.println(file.isDirectory());// false
System.out.println(file.exists());// true
System.out.println(file.isFile());// true
}
if (file.exists()){
//判断file是否为目录
if (file.isDirectory()){
//正确的话输出路径
System.out.println(file.getPath());
}
//判断file表示的是否为文件
if (file.isFile()){
//正确的话输出文件名字
System.out.println(file.getName());
}
}
字节流 字符串 API
IO流:
java.io.OutputStream抽象类: 字节输出流 (顶层类)
// 成员方法
void close() :释放资源
void?flush() :刷新缓冲区(对于字节流来说没有作用)
// 写字节的成员方法
abstract void?write(int?b): 一次写一个字节 (参数是int是为了代码中写表示byte的整数方便不用强转)
void?write(byte[]?b): 一次写一个字节数组
void?write(byte[]?b,?int?off,?int?len): 一次写一个字节数组的一部分
java.io.FileOutputStream类: 文件字节输出流 (向文件写数据)
// 构造方法
FileOutputStream(String?name): 通过文件路径创建文件字节输出流
FileOutputStream(File?file): 通过File对象创建文件字节输出流
FileOutputStream(String?name, boolean append): 通过文件路径创建文件字节输出流, true可以续写
FileOutputStream(File?file, boolean append): 通过File对象创建文件字节输出流, true可以续写
java.io.InputStream抽象类: 字节输入流 (顶层类)
// 常用成员方法
void?close(): 释放资源
// 读数据的方法
int?read(): 一次读一个字节. 读到文件末尾返回-1 (返回int也是为了代码编写方便)
int?read(byte[]?b): 一次读一个字节数组. 读到的字节存放在参数中的字节数组中, 返回int值是本次读到的字节的个数. 读到文件末尾返回-1
java.io.FileInputStream类: 文件字节输入流
// 构造方法
FileInputStream(String?name): 使用文件路径创建文件字节输入流
FileInputStream(File?file): 使用File对象创建文件字节输入流
java.io.Reader抽象类: 字符输入流 (顶层)
// 常用成员方法
void?close() :关闭此流并释放与此流相关联的任何系统资源
// 读数据的方法
int?read(): 一次读一个字符char, 返回读到的字符. 读到文件末尾返回-1 (返回int为了代码编写方便)
int?read(char[]?cbuf): 一次读取一个字符数组char[]. 返回读取的字符个数. 读到文件末尾返回-1
java.io.FileReader类: 文件字符输入流
// 构造方法
FileReader(File?file): 根据File对象创建文件字符输入流
FileReader(String?fileName): 根据File对象创建文件字符输入流
java.io.Writer抽象类: 字符输出流 (顶层类)
// 常用成员方法
abstract void?close(): 刷新缓冲区并释放资源
abstract void?flush() :刷新缓冲区
// 写
void?write(int?c): 写一个字符 (int类型为了代码编写方便)
void?write(char[]?cbuf): 写一个字符数组
abstract void?write(char[]?b,?int?off,?int?len): 写一个字符数组的一部分
void?write(String?str): 写一个字符串
void write(String str, int off, int len): 写一个字符串的一部分
java.io.FileWriter类: 文件字符输出流
// 构造方法
FileWriter(File?file): 通过File对象创建文件字符输出流
FileWriter(String?fileName): 通过文件路径创建文件字符输出流
FileWriter(File?file, boolean append): 通过File对象创建文件字符输出流. 第二个参数为true可以续写
FileWriter(String?fileName, boolean append): 通过文件路径创建文件字符输出流. 第二个参数为true可以续写
集合:
java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable
// 构造方法
Properties(): 创建一个Properties集合
// 可以使用Map接口中的方法
// 特有成员方法
Object?setProperty(String?key,?String?value): 保存/替换键值对
String?getProperty(String?key): 通过键获取值. 键不存在返回null
Set<String> stringPropertyNames(): 返回键的集合
void store(OutputStream out, String comments): 将集合数据用字节流写入文件(不能中文), 并写入注释
void store(Writer writer, String comments): 将集合数据用字符流写入文件(可以中文), 并写入注释
void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能读中文)
void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以读中文)
i:intput输入(读取)把硬盘中(文件)的数据读取到内存中(Java程序)使用
0:output输出(写出)把内存中(Java程序)的数据读取到硬盘中(文件)保存
入和出都是相对于内存来说的
流:数据(字符,字节) 1个字符= 2个字节 1个字节=8个二进制
输入流 输出流
字节流 字节输入流 字节输出流
InputStream OutputStream
字符流 字符输入流 字符输出流
Reader Writer
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |