package com.io;
import java.io.File;
import org.junit.Test;
/*
IO流,也叫输入输出流(input、 output);
IO技术主要的作用使解决设备与设备之间的数据传输问题;比如:硬盘-->内存; 内存-->硬盘;
IO技术的应用场景:导出报表、上传、下载、解析xml文件...
数据一般是以文件的形式保存到硬盘上的;于是sun公司就使用了一个 File 类来描述文件或者文件夹;
*/
public class Demo1 {
/*
File类的构造方法:
File(String pathname):根据指定路径的文件或者文件夹创建一个File类对象;
File(File parent, String child):根据parent路径名对应的File对象和child路径名创建一个File对象;
File(String parent, String child):根据parent路径名和child路径名创建一个File对象;
*/
@Test
public void test1(){
// 根据指定路径的文件或者文件夹创建一个File类对象;
File file1 = new File("D:\\a.text");
System.out.println("文件存在吗?" + file1.exists()); // exist():判断文件是否存在;
File file2 = new File("D:\\");
System.out.println("文件夹存在吗?" + file2.exists());
File file3 = new File("D:\\test");
System.out.println("文件夹存在吗?" + file3.exists());
}
@Test
public void test2(){
File parentFile = new File("D:\\");
File file = new File(parentFile, "a.txt");
System.out.println("文件是否存在:" + file.exists());
File file2 = new File("D:\\", "a.txt");
System.out.println("文件是否存在:" + file2.exists());
}
/*
目录分隔符:在Windows系统上的目录分隔符是\,该符号不能单独使用,需要转义(\);在linux系统上的目录分隔符是/;
但是,windows系统可以使用两种目录分隔符,写成/也可以,而且只需要写一个/就行;
其他操作系统都是只认一种目录分隔符;
*/
@Test
public void test3(){
// File.separator:获取当前系统所使用的目录分隔符;Java会自动匹配当前系统,获取对应的目录分隔符;
System.out.println(File.separator);
String filepath = "D:" + File.separator + "a.txt";
System.out.println("文件路径:" + filepath); // 文件路径:D:\a.txt
}
/*
路径问题:
绝对路径:该文件在硬盘上的完整路径;一般都是以盘符开头的;
相对路径:资源文件相对于当前程序所在的路径;
. 代表当前路径;
.. 代表上一级路径;
注意:如果资源文件与当前程序不在同一个盘符下面,是无法写出相对路径的;
*/
@Test
public void test4(){
File file = new File(".");
System.out.println("获取当前程序的绝对路径:" + file.getAbsolutePath());
File file2 = new File("..\\..\\..\\a.txt");
System.out.println("文件是否存在:" + file2.exists());
// 如果在src目录下创建一个新的文件b.txt,那么相对路径可以直接写成下面的样式;
File file3 = new File("src\\b.txt");
System.out.println("文件是否存在:" + file3.exists());
}
}
package com.io;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
/*
File类的常见方法:
创建方法:
createNewFile():在指定位置创建一个文件;创建成功,返回true;如果文件已经存在,创建失败,返回false;
mkdir():在指定位置创建目录;只能创建最后一级目录,如果上级目录不存在就会抛异常;
mkdirs():在指定位置创建目录;可以创建多级目录;
renameTo(File dest):重命名文件或文件夹;
删除方法:
delete():删除一个文件或一个空文件夹;成功返回true;失败返回false;
deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录;
保证程序异常时创建的临时文件也可以被删除;
判断方法:
exists():判断文件或文件夹是否存在;
isFile():判断是否是文件;
isDirectory():判断是否是文件夹;
isHidden():判断是否是一个隐藏的文件,或是否是一个隐藏的目录;
isAbsolute():判断是否是绝对路径;
获取方法:
getName():获取文件或文件夹的名称,不包含上级路径;不管文件是否存在;
getPath(): 返回路径;
getAbsolutePath():获取文件的绝对路径,与文件是否存在没关系
length():获取文件的大小(字节数),如果文件不存在则返回0,如果是文件夹也返回0。
getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified():获取最后一次被修改的时间。
文件夹相关:
static File[] listRoots():列出所有的根目录(Window中就是所有系统的盘符)
list():返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
listFiles():返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
*/
// 自定义文件名过滤器
class MyFilter implements FilenameFilter{
// dir:文件夹; name:文件名;
@Override
public boolean accept(File dir, String name) {
System.out.println(name);
// 过滤规则:
return name.endsWith(".java");
}
}
public class Demo2 {
// 创建方法
@Test
public void create() throws IOException{
// 创建指定的文件
File file = new File("D:\\a.txt");
System.out.println("创建成功了吗?" + file.createNewFile());
// 在指定位置创建目录;创建成功,返回true;如果目录已经存在,创建失败,返回false;
File dir = new File("D:\\aa");
System.out.println("创建目录成功了吗?" + dir.mkdir());
// 只能创建最后一级目录,如果上级目录不存在,就会报错;
File dir2 = new File("D:\\aaa\\bbb");
System.out.println("创建目录成功了吗?" + dir2.mkdir());
// 创建多级目录
File dirs = new File("D:\\aaa\\bbb");
System.out.println("创建多级目录成功了吗:" + dirs.mkdirs());
// renameTo():如果目标文件与源文件是在同一个目录下,那么renameTo()的作用是重命名;
// 如果不是在同一个目录下,renameTo()的作用就是剪切;
File destFile = new File("D:\\abc.txt");
System.out.println("重命名文件:" + file.renameTo(destFile));
// 如果目标文件夹与源文件夹在同一目录下,且源文件夹是空文件夹,那么可以重命名;如果源文件夹是非空的,则不能操作;
File d1 = new File("D:\\test");
File d2 = new File("D:\\aaaaaatest");
System.out.println("重命名文件夹:" + d1.renameTo(d2));
// 如果目标文件夹与源文件夹不在同一目录下,则不能操作;
File d3 = new File("D:\\test");
File d4 = new File("E:\\aaaaaatest");
System.out.println("重命名文件夹:" + d3.renameTo(d4));
}
// 删除方法
@Test
public void delete(){
// 删除指定的文件;
File file = new File("D:\\a.txt");
System.out.println("删除文件:" + file.delete());
// 删除文件夹;只能删除空的文件夹;
File file2 = new File("D:\\aa");
System.out.println("删除文件夹:" + file2.delete());
// jvm退出时删除文件或文件夹;如果文件或文件夹存在,就删除;如果不存在,没有任何操作;
file2.deleteOnExit();
}
// 判断方法
@Test
public void judge(){
File file = new File("D:\\a.txt");
System.out.println("判断文件是否存在:" + file.exists());
System.out.println("判断是否是文件:" + file.isFile());
System.out.println("判断是否是目录:" + file.isDirectory());
System.out.println("判断是否隐藏:" + file.isHidden());
System.out.println("判断是否是绝对路径:" + file.isAbsolute());
}
// 获取方法
@Test
public void getFile(){
// 获取文件的名称;即使文件不存在,也可以获取;
File file = new File("D:\\test\\a.txt");
System.out.println("获取文件名:" + file.getName()); // 文件名:a.txt
// 获取文件或文件夹的路径;创建File对象的时候传入什么路径,他就获取什么路径;
File dir = new File("..\\..\\test");
System.out.println("获取路径:" + file.getPath());
System.out.println("目录路径:" + dir.getPath());
// 获取文件的绝对路径;在创建File对象时指定的路径前面,加上当前程序的绝对路径;
System.out.println("绝对路径:" + dir.getAbsolutePath());//D:\myeclipse\workspace\IO\..\..\test
// 获取文件的大小
System.out.println("文件的大小(字节数):" + file.length());
// 获取文件或文件夹的父路径;根据创建File对象时传入的路径来获取;不管文件是否存在;
System.out.println("父路径:" + dir.getParent()); // 父路径:..\..
// 获取文件最后一次被修改的时间;
File f = new File("D:\\a.txt");
long last = f.lastModified();
System.out.println("最后一次被修改的时间(毫秒值):" + last); // 1506675946380
Date date = new Date(last);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = dateFormat.format(date);
System.out.println("最后一次被修改的时间:" + strDate);
}
// 获取方法
@Test
public void getDir(){
// 获取所有的根目录;
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++){
System.out.println(roots[i].getAbsolutePath());
}
System.out.println("-------------");
// 获取指定目录下所有的文件及文件夹;只获取文件或文件夹的名字;
File file = new File("D:\\myeclipse\\workspace\\IO");
String[] strs = file.list();
for (String str : strs){
System.out.println(str);
}
System.out.println("-------------");
// 获取指定目录下所有的文件及文件夹;获取的是对应的File对象;
File[] files = file.listFiles();
for (File f : files){
System.out.println(f.getAbsolutePath());
}
System.out.println("-------------");
}
// 文件名过滤器
@Test
public void listJava(){
File file = new File("D:\\myeclipse\\workspace\\IO");
if (!file.exists()){
System.out.println("文件夹不存在;");
return;
}
// 如果文件名过滤器中的accept()方法返回true,则将符合规则的文件放入File数组中;
File[] files = file.listFiles(new MyFilter());
for (File f : files){
System.out.println(f);
}
}
}