IO 流
File 类
File更应该叫做一个路径 此类位于java.io.File
/*
* File(String pathname):根据一个路径得到File对象
* File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
* File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
* */
File file = new File("aa.txt"); // 根据路径File对象这个对象可能不存在
System.out.println(file); // aa.txt
System.out.println(file.exists()); // 判断此文件是否存在,存在返回true
boolean creat = file.createNewFile(); // 创建文件,创建成功返回true,否则返回false
File file2 = new File("bb","cc.txt");
// System.out.println(file2.createNewFile()); // 只能创建一个文件
// System.out.println(file2.mkdirs()); //创建文件夹,如果父文件夹不存在,会帮你创建出来
System.out.println(file2.mkdir()); // 创建文件夹 如果存在这样的文件夹,就不创建了,不能创建多个文件夹
}
File类的重命名和删除功能:
- public boolean renameTo(File dest):把文件重命名为指定的文件路径
- public boolean delete():删除文件或者文件夹
重命名注意事项:
如果路径名相同,就是改名,如果路径名不同,就是改名并剪切。
File f = new File("aa.txt");
f.createNewFile();
File f1 = new File("bb/bb.txt");
f.renameTo(f1); // 将aa.txt 剪切到bb文件夹并且改名bb.txt
删除注意事项:
Java中的删除不走回收站。要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
File f = new File("aa.txt");
f.delete(); // 删掉aa.txt
File f1 = new File("bb/aa.txt");
f1.delete(); // 删掉bb下的aa.txt
File类的判断功能:
/* public boolean isDirectory():判断是否是目录
* public boolean isFile():判断是否是文件
* public boolean exists():判断是否存在
* public boolean canRead():判断是否可读
* public boolean canWrite():判断是否可写
* public boolean isHidden():判断是否隐藏
*/
File f = new File("aa.txt");
f.setWritable(false); // windos 中可以设置可写权限,但是不能设置可读权限,认为都可读
System.out.println(f.canWrite()); // false
f.setReadable(false);
System.out.println(f.canRead()); // true
File类的获取功能:
* public String getAbsolutePath():获取绝对路径
* public String getPath():获取路径
* public String getName():获取名称
* public long length():获取长度。字节数
* public long lastModified():获取最后一次的修改时间,毫秒值
* public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
* public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
文件名称过滤器的概述及使用:
public static void main(String[] args) throws IOException{
/* * public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*/
File dir = new File("E:\\");
// 文件名称过滤器 -- 找出e盘直接子文件下的所有的.jpg结尾的文件名
String[] endJPGArray =dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f = new File(dir,name);
return f.isFile() && f.getName().endsWith(".jpg");
}
});
for (String name : endJPGArray) {
System.out.println(name);
}
}
File的递归练习
统计一个文件或则文件夹的大小
public class test3 {
public static void main (String[] args){
File f = getFile();
System.out.println(getSize(f));
}
public static File getFile(){
Scanner sc= new Scanner(System.in);
System.out.println("输入文件夹目录");
while(true){
String dirStr = sc.nextLine();
File f = new File(dirStr);
if(!f.exists()){
System.out.println("路径不存在");
}else{
return f;
}
}
}
public static long getSize(File f){
long l =0;
if(f.isFile()){
l +=f.length();
return l;
}else{
File[] fl = f.listFiles();
for (File file : fl) {
if (file.isFile()){
l +=file.length();
}else{
l += getSize(file); // 递归统计
}
}
return l;
}
}
}
递归删除一个文件或者文件夹
java程序删除的内容不会进垃圾桶的
public static void main (String[] args){
File f = getFile();
delete(f);
}
public static File getFile(){
Scanner sc= new Scanner(System.in);
System.out.println("输入文件夹目录");
while(true){
String dirStr = sc.nextLine();
File f = new File(dirStr);
if(!f.exists()){
System.out.println("路径不存在");
}else{
return f;
}
}
}
public static void delete(File f){
System.out.println("1111");
if(f.isFile()){
f.delete();
}else{
File[] fs = f.listFiles();
for (File file : fs) {
if(file.isFile()){
file.delete();
}else{
delete(file);
}
}
f.delete(); // 删除文件夹内的内容后还要把当前空的文件夹删除掉
}
}
将一个文件或者文件夹拷贝到一个文件夹下面:
public class test3 {
public static void main (String[] args) throws IOException{
File src = getFile();
File dest = getFile();
if(dest.isFile()){
System.out.println("拷贝到某个文件夹,而不是文件");
return;
}
if(src.equals(dest)){
System.out.println("目标文件夹是原文件夹的子文件夹");
return;
}
copy(src,dest);
}
public static File getFile(){
Scanner sc = new Scanner(System.in);
System.out.println("输入文件夹路径或者文件路径");
while(true){
String dir = sc.nextLine();
File f = new File(dir);
if(!f.exists()){
System.out.println("路径不存在");
}else{
return f;
}
}
}
public static void copy(File src,File dest) throws IOException{
File newfile = new File(dest,src.getName());
if(src.isFile()){
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newfile));
int len;
while((len=bis.read())!=-1){
bos.write(len);
}
bis.close();
bos.close();
}else{
newfile.mkdir();
File[] files = src.listFiles();
for (File file : files) {
copy(file,newfile);
}
}
}
}
网友评论