概述
File类
用来将文件或文件夹封装成对象。
方便对文件或文件夹的属性信息进行操作。
File对象可以作为参数传递给流对象的构造方法。
了解File类中的常用方法。
File类中的常见方法:
1、创建
boolean createNewFile(); 在指定位置创建文件,如果该文件已经存在,则不创建,返回为false。
这点和输出流不一样,输出流对象一建立就创建文件,如果已经存在的话会覆盖源文件。
2、删除
boolean delete(); 删除失败则返回false
void deleteOnExit();退出的时候删除指定文件
3、判断
boolean canExcute(); 是否可执行
boolean exists(); 判断文件是否存在
boolean mkdir(); 创建目录(创建文件夹),只能创建一层目录
boolean mkdirs(); 创建多级目录
boolean isFile(); 判断是否为文件
boolean isDiretory(); 判断是否为目录
//在判断文件对象是否为目录或文件时,必须先判断该文件对象封装的内容是否存在,用exists方法判断。
boolean isHiden(); 是否为隐藏文件
boolean isAbsolute(); 是否为绝对路径
4、获取信息
getName(); 获取封装对象的名称
getPath(); 当前路径
getAbsolutePath(); 获取绝对路径
getParent(); 返回的是绝对路径中文件的父目录
long lastModified(); 最后一次修改的时间
long length(); 返回此抽象路径名表示的文件的长度(文件大小)
String[] list(); 返回指定路径下包含的文件和文件夹的名称,包含隐藏文件
//调用list()方法的file对象必须是封装了一个目录,并且该目录必须存在。
File[] listFiles(); 返回目录下的文件与文件夹,返回的都是File对象,方便进行后续操作
一些简单方法的运用:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
method_4();
}
public static void method_4()
{
File f = new File("123.txt");
sop("path:"+f.getPath());
sop("AbsolutePath:"+f.getAbsolutePath());
}
//创建文件
public static void method_1()throws IOException
{
File f = new File("file.txt");
// sop("create:"+f.createNewFile());
sop("delete:"+f.delete());
}
//判断文件
public static void method_2()throws IOException
{
File f = new File("file.txt");
sop("create:"+f.createNewFile());
sop("execute:"+f.canExecute());
}
//创建File对象
public static void consMethod()
{
//将a.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象。
File f1 = new File("F:\abc\a.txt");
boolean bl=f1.mkdirs();
//
File f2 = new File("F:"+File.separator+"abc","b.txt");
File d = new File("F:\abc");
File f3 = new File(d,"c.txt");
sop(bl);
sop("f1:"+f1);
sop("f2:"+f2);
sop("f3:"+f3);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
File.separator :与系统相关的默认名称分隔符,为了方便,它被表示成字符串(目录分隔符)
下面对File进行一些简单的练习,
需求:列出指定目录下的文件或者文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容。
使用递归的方式完成。
注意事项:
1、限定条件。
2、要注意递归的次数,避免内存溢出。
/*
需求:
遍历一个目录下的文件和文件夹
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身,这种编程手法,称为递归
*/
import java.io.*;
class FileDemo3
{
public static void main(String[] args) throws IOException
{
File dir = new File("F:\java");
showDir(dir,0);
}
public static String getLevel(int level)
{
/*
用StringBuilder来装载获取到的目录,并进行分级
*/
StringBuilder sb = new StringBuilder();
for(int i=0;i<level;i++)
{
sb.append(" ");
}
return sb.toString();
}
//递归实现
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]);
}
}
/**********************************************
//递归演示
**********************************************/
//用递归求从1+.....+n的值
public static int getNum(int n) //数值太大会导致内存溢出
{
if(n==1)
return 1;
return n+getNum(n-1);
}
//用递归求一个整数的二进制表现形式
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);
System.out.print(num%2);
}
}
}
下面介绍Properties类
Properties是hashtable的子类。
也就是说它具备了map集合的特点,而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。
Properties prop = new Properties();
prop.setProperty("zhangsan",30); //设置属性的键和值
prop.getProperty("zhangsan"); //获取zhangsan所对应的值,相当于"键—值"的形式。
prop.StringPropertyNames(); //返回一个Set集合,包含prop中所有的键值。
用Properties演示软件使用次数计数:
import java.io.*;
import java.util.*;
class RunNumberDemo
{
public static void main(String[] args) throws IOException
{
File file = new File("number.ini");
if(!file.exists())
file.createNewFile();
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file);
Properties prop = new Properties();
prop.load(fis);
int number = 0;
String value = prop.getProperty("time");
if(value!=null)
{
number = Integer.parseInt(value);
if(number>=5)
{
System.out.println("试用次数已经到了,麻烦续费!");
return;
}
}
number++;
prop.setProperty("time",number+"");
prop.store(fos,"");//改完数据之后,必须store进存储的文件中
fis.close();
fos.close();
}
}
在看毕老师的代码之前,自己学习了Properties的方法之后,自己试着写了一个,也可以实现,
但相比毕老师的代码,感觉还需要更加努力才可以将代码更加精炼以及提高效率
package com.east.day18;
import java.io.*;
import java.util.*;
/*
模拟软件使用次数提示,超过次数提示试用期满,需注册
*/
class PropertyDemo2
{
public static void main(String[] args)throws IOException
{
int count = 1;
File file = new File("D:\javademo\count.txt");
if(!file.exists()){
file.createNewFile();
count = 0;
}
Properties prop = new Properties();
if(count == 0){
PrintWriter pw = new PrintWriter(new FileWriter(file));
prop.setProperty("count", "1");
prop.list(pw);
prop.clear();
pw.close();
}
else{
prop.load(new FileReader(file));
String s = prop.getProperty("count");
count = Integer.parseInt(s);
if(count < 5){
count++;
prop.setProperty("count", String.valueOf(count));
prop.store(new FileWriter("D:\javademo\count.txt"),"");
}
else {
System.out.println("免费试用时间已到,请续费以继续使用哦!");
}
}
}
}
最后
以上就是缥缈小白菜为你收集整理的黑马程序员—File类的全部内容,希望文章能够帮你解决黑马程序员—File类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复