/*
File类常见的方法:
1.创建。
构造方法。File();
boolean createNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件,而且文件存在,会覆盖。
boolean mkdir();创建文件夹。
boolean mkdirs();创建多级目录。
2.删除。
boolean delete();删除失败返回false。
void deleteOnExit();退出时删除指定文件。
3.判断。
boolean canExecute();是否可执行。
int comparaTo(File pathname);按大小比较。如果按体积比,可自定义比较器。
boolean exists();文件是否存在。
boolean isDirectory();是否是目录(文件夹)。
boolean isFile();是否是文件。
boolean isAbsolute();是否绝对目录。
boolean is Hidden();是否是隐藏。
4.获取信息。
String getName();获取名称。
String getPhth();获取路径。
String getParent();获取父目录。该方法返回的是绝对路径中的父目录
String getAbsolute();获取绝对路径。
long lastModified();获取文件最后一次修改的时间。
long length();获取文件大小。
boolean renameTo(File f);重命名。
File[] listRoots();获取有效盘符。
String[] list(FilenameFilter filter);过滤文件列表
listFiles();获取硬盘中所有文件列表。
*/
import java.io.*;
class FileDemo{
public static void main(String[] args) throws IOException{
method_1();
}
//创建File对象
public static void method_1()throws IOException{
//将a.txt封装成file对象,可以将已有和未出现的文件或者文件夹封装成对象。
File f1 = new File("C:\\abc\\a.txt");
//路径和文件分成两个参数传递
File f2 = new File("C:\\abc","b.txt");
//将父目录封装
File d = new File("C:\\abc");
File f3 = new File(d,"c.txt");
show("f1:" + f1);
show("f2:" + f2);
show("f3:" + f3);
//separator--分隔符,跨平台。
File f4 = new File("C:"+File.separator+"abc"+File.separator+"a.txt");
show("create:"+f4.createNewFile());
show("delete:"+f1.delete());//true||false
f2.deleteOnExit();//退出时删除
}
public void method_2(){
File f = new File("1.txt");
show("execute:" + f.canExecute());//ture||false
show("exists" + f.exists());
//创建目录,只能创建一级目录
File dir = new File("acb");
dir .mkdir();
}
public static void method_3(){
File f = new File("file.txt");
//记住在判断文件对象是否是文件或者目录时,必须要先判断该文件对象封装的内容是否存在。
//通过exists判断。
if(f.exists()){
show("dir"+f.isDirectory());//判断是否是目录
show("file:"+f.isFile());//判断是否是文件
}
show(f.isAbsolute());
}
public void method_4(){
File f = new File("C:\\a.txt");
show("path:" + f.getPath());
show("abspath:" + f.getAbsolutePath());
show("parent:" + f.getParent());//该方法返回的是绝对路径中的父目录
}
public static void method_5(){
File f1 = new File("C:\\text.java");
File f2 = new File("C:\\TEXT.java");
f1.renameTo(f2);
}
public static void listRootsDemo(){
File[] files = File.listRoots();//列出有效盘符。
for(File f : files){
show(f);//C,D,E,F
}
File f = new File("C:\\");
String[] names = f.list();//调用list方法的file对象必须是封装了一个目录,该目录还必须存在。
for(String s: names){
show(s);//打印硬盘中所有列表。
}
}
public static void method_6(){
File dir = new File("C:\\");
String[] arr = dir.list(new FilenameFilter(){
public boolean accept(File dir,String name)//dir就是上面指定的路径
{
return name.endsWith(".bmp");
}
});
for(String name : arr){
show(name);//打印所有文件
}
//----------------------------------
File dir = new File("C:\\");
File[] files = dir.listFiles();
for(File f : files){
show(f);
}
}
public static void show(Object obj){
System.out.println(obj);
}
}
/*
获取指定目录下文件或文件夹,包含子目录中的内容
也就是列出指定目录下的所有内容。
----递归
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
这种表现形式,或者编程手法,叫做递归。
递归要注意:
1.限定条件。
2.递归的次数,避免内存溢出。
*/
import java.io.*;
class FileDemo{
public static void main(String[] args){
File dir = new File("D:\\")
showDir(dir,0);
}
public static void showDir(File dir,int level){
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for(int i = 0; i<files.length; i++){
if(files[i].isDirectory())
showDir(files[i],level);//递归调用
else
System.out.println(getLevel(level)+files[i]);
}
}
/*
---带层次
abc
|---abc.txt
*/
public static void getLevel(int level){
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int i = 0; i < level; i++){
sb.insert(0,"| ")
}
return sb.toString();
}
}
/*
删除一个带内容的目录:
删除原理:
在windows中,删除目录时从里面往外删除的、
既然是从里往外删除。就需要用到递归。
*/
import java.io.*;
class RemoveDir{
public static void main(String[] args){
File dir = new File("D:\\testdir");
removeDir(dir);
}
public static void removeDir(File dir){
File[] files = dir.listFiles();
for(int i = 0;i < files.length; i++){
if(!files[i].isHidden()&&files[i].isDirectory())
removeDir(files[i]);
else
System.out.println(files[i].toString()+
"::" + files[i].delete());
}
System.out.println(dir+"::dir::" + dir.delete());
}
}
/*
将一个指定目录下的java文件的绝对路径,存储到一个文本文件。
建立一个java文件的列表文件。
思路:
1.对指定的目录进行递归。
2.获取递归过程中所有的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。
*/
import java.io.*;
import java.util.*;
class JavaFileLists{
public static void main(String[] args){
File dir = new File("D:\\");
List<File> list = new ArrayList<File>();
fileToList(dir,list);
System.out.println(list.size());
//存到文件,数据的持久化。
File file = new File(dir,"javaListFile");
writeToFile(list,file.toString());
}
public static void fileToList(File dir,List<File> list){
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory())
fileToList(file,list);
else{
if(file.getName().endsWith(".java"));
list.add(file);
}
}
}
public static void writerToFile(List<File> list,String javaListFile)
throws IOException{
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter(javaListFile));
for(File f : list)
{
String path = f.getAbsolutePath();
bw.write(path);
bw.newLine();
bw.flush();
}
}catch (IOException e){
throw e;
}finally{
try{
if(bw != null)
bw.close();
}catch (IOException e){
throw e;
}
}
}
}
IO流--File类及方法
最新推荐文章于 2023-07-29 16:47:09 发布