本帖最后由 小石姐姐 于 2018-4-26 14:15 编辑
Java-File类和字节字符流学习笔记 Day09_File类 ,字节流和字符流File类的概述和用法 文件和目录路径名的抽象表示形式,File 类的实例是不可变的 构造方法; 只是单纯的创建了,但是没有在电脑中生成文件 File(File parent,String child) 传入代表文件夹的file对象,后面加上文件名 File(String pathname) 直接传入绝对路径 File(String parent,String child) 传入文件夹的路径,传入文件夹名字 File的常见功能创建文件 注意:传入一个多级路径时,路径的最后所指向的文件就是你要操作的文件 获取功能 File getAbsolueteFile() 获取文件的绝对值路径的file对象 String getAbsolutePath() 获取文件路径的字符串 String getParent() 获取父路径的字符串 File getParentFile() 获取父路径的file对象 String getName() 获取文件名或者目录名 String getPath(); 获取创建File对象时保存的路径 long lasModified(); 获取文件的创建时间 long length(); 获取文件的所占的字节数
修改功能 判断功能
* `boolean isDirectory();` 判断file对象是否是文件夹,是则返回true,否则返回false
* `boolean isFile(); ` 判断file对象是否u才能在
* `boolean isHidden();` 判断指定文件路径是否存在**隐藏文件**创建功能
boolean creatNewFile() 创建文件
boolean mkdir() 创建文件夹
boolean mkdirs() 创建多级文件夹删除功能boolean delete(); 不单单是删除文件夹,这里还可以删除文件 注意: 删除文件之前,首先要确定根文件夹下没有子文件或子文件夹,
如果有子文件,要先删除文件才能删除父类文件夹
public class FileDmeo2 {
public static void main(String[] args) throws IOException {
// 创建一个文件
// File f1 = new File("a");
// System.out.println(f1.createNewFile());
```
// 创建一个文件夹
// File f2 = new File("b");
// System.out.println(f2.mkdir());
// 创建多个文件夹
// File f3 = new File("d\\bb\\c");
// System.out.println(f3.mkdirs());
// 删除文件夹
// System.out.println(f2.delete());
// 注意 我们在删除多级文件夹时,删除的时他最后一个根目录文件夹,而不是全部的文件夹
System.out.println(f3.delete());
// 删除一个文件,他的根目录下不能有子文件夹和子文件存在
File f5 = new File("d");
System.out.println(f5.delete());
}
}判断功能 boolean exists(); 判断文件是否存在 boolean isAbsolute(); 测试此抽象路径名是否为绝对路径名 boolean isDirectory(); 判断是否是文件夹是则返回true,否则返回false boolean isFile(); 判断file对象所指向是都是文件夹 boolean isHidden(); 判断绝对路径中是否有隐藏文件存在
public class FileDemo_03 {
public static void main(String[] args) throws IOException {
File f1 = new File("c");
File f3 = new File("a.txt");
// 创建里一个文件
f3.createNewFile();
// boolean exists(); 判断文件或者文件加夹是否存在
method1(f3);
// 判断这个file对象所指向的是否是文件夹,如果是则返回true,否则返回false
method2(f1);
// // boolean isFile(); 判断是是否是一个文件,如果是返回true,否则返回false
method3(f3);
//判断此路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
method4();
// boolean isHidden(); 判断绝对路径下有没有隐藏文件属性,如果有则返回true,没有则返回false
method5()
}
private static void method5() {
// boolean isHidden(); 判断绝对路径下有没有隐藏文件属性,如果有则返回true,没有则返回false
File f = new File("D:\\Dmeo\\123.txt");
System.out.println("是否有隐藏文件"+f.isHidden());
}
private static void method4() {
File f = new File("D:\\Dmeo\\123.txt");
System.out.println(f.isAbsolute());
}
private static void method3(File f3) {
// boolean isFile(); 判断是是否是一个文件,如果是返回true,否则返回false
System.out.println(f3.isFile());
}
private static void method2(File f1) {
// 判断这个file对象所指向的是否是文件夹,如果是则返回true,否则返回false
System.out.println(f1.isDirectory());
}
private static void method1(File f3) {
// boolean exists(); 判断文件或者文件加夹是否存在
System.out.println(f3.exists());
}
}获取功能 File getAbsoluteFile() 以File对象的形式返回当前File对象所指向的绝对路径 String getAbsolutePath() 返回File对象所指向的绝对路径 String getPatent(); 返回一个字符串形式的父路径 File getParentFile(); 以File对象的形式返回一个父路径String getName(); 返回文件或文件夹的名称 String getPath(); 给出的文件是什么路径,输出的就是什么路径 long lastModified(); 获取文件最后修改的时间,以毫秒值long返回 long length(); 获取这个文件的字节数
修改功能: boolean renameTo(File dest) 将当前file对象所指向得路径修改为指定File所指向的路径 注意:在同一个文件目录下,不能存在两个同名的文件,即修改成功的前提,在该file对象指定路径下不能存在相同的文件
public class FileDemo_04 {
public static void main(String[] args) throws IOException {
// 返回绝对路径的方法
method();
// 返回指定文件的路径
// String getPatent();
// File getParentFile();
method2();
// String getName(); //返回文件或文件夹的名称
// String getPath(); //给出的文件是什么路径,输出的就是什么路径
method3();
method4();
//boolean renameTo(File dest) 修改文件名
File f = new File("c.txt");
File f2 = new File("d.txt");
if (!f.exists()) {
f.createNewFile();
}
System.out.println(f.renameTo(f2));
}
private static void method4() {
// long lastModified();
// long length();
File f = new File("a.txt");
long a = f.lastModified();// 返回这个文件的long值
Date da = new Date(a); // 调用date构造方法,求出这个文件创建的时间
System.out.println(da.toLocaleString());
// long length(); 返回这个文件的字节数;斌且只能返回文件的字节数
long b = f.length();
System.out.println(b);
}
private static void method3() throws IOException {
// String getName(); 返回文件名
// String getPath(); 返回路径
File f = new File("a.txt");
//判断这个文件是否存在
if (!f.exists()) {
f.createNewFile();
}
File f2 = new File("d:\\b\\a.txt");
File f3 = new File("b");
// String getName();
// System.out.println(f.getName()); //可以获取文件和文件夹的名称
// System.out.println(f2.getName());
// System.out.println(f3.getName());
// String getPath() 你给出什么路径,输出的就是什么路径,绝对路径输出绝对路径,相对路径输出相对路径
System.out.println(f.getPath());
System.out.println(f2.getPath());
System.out.println(f3.getPath());
}
private static void method2() throws IOException {
File f2 = new File("D:\\Dmeo2");
// File f = new File("D:\\Demo2\\hello.txt");
File f3 = new File(f2, "Demo.txt");
// 先判断是否存在文件夹,如果不存在文件夹,那么我们就需要添加文件夹
if (!f2.exists()) {
f2.mkdirs();
}
// 创建完对象以后,我们再创建文件
System.out.println(f3.createNewFile());
// String getParent()
System.out.println(f3.getParent()); // 返回指定文件的父路径,以字符串的形式输出
// File getParentFile()
System.out.println(f3.getParentFile()); // 以file类对象的形式返回父路径,调用toString方法,输出
}
private static void method() {
File f = new File("d:\\a\\b.txt");
File f2 = new File("a.txt");
// File getAbsoluteFile() 以file对象的形式返回 当前File的对象所指向的绝对路径
System.out.println(f2.getAbsoluteFile());
// String getAbsolutePath()返回的String 返回file对象所指向的绝对路径
System.out.println(f2.getAbsoluteFile());
}
}总结:IO字节流与IO字符流 InputStream和OutputStream 输入流 和 输出流 字节流 注意:数据传输的最底层是字节,所以普通的字符流能做的事情,我们字节流也能做 FileReader 和FileWriter 输入流 和输出流 字符流 字节流和字符流的区别字节流复制文本文件FileInputStream类
int read(): 读取一个字节, 读完返回-1
int read(byte[] b): 读取字节到数组中, 返回读取的长度. 读完返回-1 close(): 释放资源
FileOutputStream类
void write(byte b): 写一个字节 void write(byte[] b, int offset, int len): 从字节数组的指定索引开始写入指定长度个字节 close(): 释放资源
将指定目录(包含内容)复制到另一个目录中: 分析 首先,先要判断是否是文件夹路径 再将文件路径转换成一个File[]数组,存储路径 再判断文件是否是一个文件,如果是一个文件那么就直接复制,如果不是则 else { 利用递归思想} 再次循环调用自身的方法,知道把所有的文件全部复制完成
/*
* 需求: 将一个文件路径,复制到另一个文件路径中
*
* 我们需要源目录 目标目录
*
* 分析:
* 首先我们要获取源目录下所有的子文件和子目录
* 我们可以把源文件封装成一个File对象
* 我们可以调用File类ListFiles()方法;
* 我们可以获取源目录下所有的文件和子目录所对应的File对象.
* 如果我们获取到的是文件
* 先在目标目录中创建该文件所对应的目标
* 进行文件的复制.
* 如果我们获取到的是子目录
* 看看子目录下面是否还有其他的文件和更深层次的子目录
*
*/
public class IoDemo04 {
public static void main(String[] args) throws IOException {
// 源文件
File src = new File("d:\\myAPI"); // d:myAPI\\Demo.txt
// 目标文件
File dest = new File("d:\\Demo"); // d:\\Demo\\myAPI\\Dmeo.txt
dest.mkdirs();
method(src, dest);
}
public static void method(File src, File dest) throws IOException {
// 先判断这两个是否是一个路径,如果这两个是路径,那么执行下面的操作
if (src.isDirectory() && dest.isDirectory()) {
File f3 = new File(dest, src.getName());
f3.mkdirs();
// 获取路径下的所有子文件和子目录
File[] files = src.listFiles();
for (File newSrc : files) {
// 判断file对象是否是文件 newSrc: d:myAPI\\Demo.txt
if (newSrc.isFile()) {
// 如果file对象是文件,那么就进行文件复制
// IO流复制
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(newSrc.getAbsolutePath()));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(f3, newSrc.getName())));
int ar;
while ((ar = bis.read()) != -1) {
bos.write(ar);
}
bos.close();
bis.close();
} else {
// 如果不是File对象不是文件,那么就是路径,子目录(递归)
method(newSrc, f3);
}
}
}
}
}
|
|