过滤获取指定后缀的文件
输出文件目录列表
递归
删除文件
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* File 获取
* String[] list():获取指定目录中的所有文件和目录的名称
* String[] list(FileNameFilter fnf): 获取指定目录中,过滤后的文件 或目录名称
* File[] listFiles():获取指定目录下的所有文件 和 目录对象
*
* --递归---
* 需求:
* 列出制定目录下的文件或者文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容.
*
* 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可.函数 中 还需要调用自己,这样我们就称为 "递归"
* 递归要注意点的是
* 1.限定条件
* 2.注意递归的次数,尽量避免内存溢出
*
* ---删除一个带内容的目录--- java删除是不走回收站,注意确定
* 删除的原理
* 在window中,删除目录从里面往外删除.
* 既然是从里往外删除,就需要用到递归了.
*
* ---建立指定目录下的java文件的绝对路径,存储到一个文本文件
* 建议一个java文件列表文件
*
* 思路:
* 1.对指定的目录进行递归
* 2.获取递归过程素有的java文件路径
* 3.将这些路径存储的到指定的集合中
* 4.将集合中的数据写入如到一个文件中.
*
*/
public class FileDemo2 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("========过滤查找===========");
//acceptFile();
//listFile();
System.out.println("========遍历所有文件和目录===========");
/*File dir=new File("D:\\明天");
showDir(dir,0);*/
System.out.println("========递归===========");
//toBin(6); 还需要逆转 输出
//toBin_1(6);
//getSum(3); //6
/*System.out.println("========删除文件===========");
File dir=new File("E:\\kankan");
removeDir(dir);*/
File dir=new File("D:\\me");
List<File> list=new ArrayList<File>();
fileToList(dir,list);
System.out.println(list.size());
File file=new File(dir,"javaList.txt");
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(".txt"))
list.add(file);
}
}
}
public static void writeToFile(List<File> list,String javaListFile) throws IOException{
BufferedWriter bufw=null;
try{
bufw=new BufferedWriter(new FileWriter(javaListFile));
for(File f:list){
String abspath=f.getAbsolutePath();
bufw.write(abspath);
bufw.newLine();
bufw.flush();
}
}catch(IOException e){
throw e;
}finally{
try{
if(bufw!=null)
bufw.close();
}catch(IOException e){
throw e;
}
}
}
//删除文件
public static void removeDir(File dir){
File[] files=dir.listFiles();
for (File file : files) {
//不是隐藏 并且还是目录
if(!file.isHidden()&&file.isDirectory())
removeDir(file);
else
System.out.println(file.getName()+"::"+file.delete());
}
System.out.println(dir.getName()+"::dir::"+dir.delete());
}
//求和
public static int getSum(int n){
if(n==1)
return 1;
return n+getSum(n-1);
}
//现在 采用 递归
public static void toBin_1(int num){
if(num>0){
toBin_1(num/2);
System.out.print(num%2);
}
}
//以前转二进制
public static void toBin(int num){
while(num>0){
System.out.print(num%2);
num=num/2;
}
}
/**
* 列出所有目录结构
*/
public static void showDir(File dir,int space){
getLever(space);
System.out.println(dir);
space++;
File[] file=dir.listFiles();
for(File f:file){
if(f.isDirectory())
showDir(f,space);
else{
getLever(space);
System.out.println(f.getName());
}
}
}
private static void getLever(int space){
for (int i = 0; i < space; i++) {
System.out.print(" ");
}
System.out.print("|--");
}
/**
* 获取目录下的所有文件对象 ,这样可以进行其他的操作
* 如果使用list() 只能获取文件和目录的名称
*/
public static void listFile(){
File dir=new File("c:\\");
File[] files=dir.listFiles();
for(File f:files){
System.out.println(f.getName()+"::"+f.length());
}
}
/**
* 过滤制定文件夹中的 指定的后缀名的文件
*/
public static void acceptFile(){
File dir=new File("C:\\");
String[] arr=dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(".jpg");
}
});
System.out.println(arr.length);
for(String name:arr){
System.out.println(name);
}
}
}
属性文件的读取和输出
/**
* Properties是hashTable的子类
* 也就是说他是具备Map集合的特点,而且他里面存储的都是字符串.
*
* 是集合中和IO技术相结合的集合容器
* 该对象的特点是:可以使用键值对形式的配置文件.
*
*
* 需求:
* 用于记录应用程序运行的次数
* 如果使用次数已到,那么给出注册提示
*
* 很容易想到计数器:
* 可是该计数器定义在应用程序中,随着程序的运行而在内存中存在,并进行自增.
* 可是随着该应用程序的退出,该计数器也在内存中消失了,程序下次启动又重新开始从0计数了.
*
*
*
*/
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//setAndGet();
System.out.println("========自定义方法加载文件到properites中===========");
//method_1();
System.out.println("========使用字节流加载数据到===========");
//loadDemo();
System.out.println("========注册使用次数的控制============");
useTimes();
}
//模拟 注册
public static void useTimes() throws IOException{
Properties prop=new Properties();
File file=new File("E:\\count.ini");
if(!file.exists())
file.createNewFile();
FileInputStream fis=new FileInputStream(file);
prop.load(fis);
String value=prop.getProperty("time");
int count=0;
if(value!=null){
count=Integer.parseInt(value);
if(count>=5){
System.out.println("您好,使用次数已到,拿钱!");
return;
}
}
count++;
prop.setProperty("time", count+"");
FileOutputStream fos=new FileOutputStream(file);
prop.store(fos, "");
fos.close();
fis.close();
}
//loadDemo
// 加载 字节流 都是早期的,加载 字符流 1.6 才开始.
public static void loadDemo() throws IOException{
Properties prop=new Properties();
FileInputStream fis=new FileInputStream("E:\\info.txt");
prop.load(fis);
fis.close();
System.out.println(prop);
prop.list(System.out);
prop.setProperty("wangwu", "39");
FileOutputStream fos=new FileOutputStream("E:\\info.txt");
prop.store(fos, "author");
fos.close();
}
/**
* 演示,如果将流中的数据存储到集合中.
* 将要将Info.txt中的键值对数据存储到集合中进行操作.
* @throws IOException
*/
public static void method_1() throws IOException{
BufferedReader bufr=new BufferedReader(new FileReader("E:\\info.txt"));
Properties prop=new Properties();
String line=null;
while((line=bufr.readLine())!=null){
String[] arr=line.split("=");
//System.out.println(arr[0]+"..."+arr[1]);
prop.setProperty(arr[0], arr[1]);
}
bufr.close();
System.out.println(prop);
}
//设置和获取元素
public static void setAndGet(){
Properties prop=new Properties();
prop.setProperty("zhangsan", "30");
prop.setProperty("lisi", "39");
System.out.println(prop);
prop.setProperty("lisi", "89");
String value=prop.getProperty("lisi");
System.out.println(value);
Set<String> names=prop.stringPropertyNames();
for(String s:names){
System.out.println(s+":"+prop.getProperty(s));
}
}
}