文件的操作程序
设计要求:
1. 列出一个文件夹中所有符合条件的文件和目录。
2. 删除一个非空的目录,并显示所有被删除的文件和目录列表。
设计思路:
先声明一个String类型的list,当主函数没有参数时,默认的列出当前目录下的所有文件和目录。File dir=new File(".");
list=dir.list();当主函数有一个参数时,则列出这个参数所表示的文件中的所有文件和目录if(args.length==1){
System.out.println("目录"+dir.getAbsolutePath()+"的列表");
list=dir.list();
}当主函数含有两个参数时,列出第一个参数所表示的文件夹中的,含有第二个参数所有表示的字符串的目录和文件。else{
System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
list=dir.list(new MyFileFilter(args[1]));
}列出列表时候,区分文件和目录for(int i=0;i<list.length;i++){
File f;
if(args.length==0) f=new File(list[i]);
else f=new File(args[0]+"\\\\"+list[i]);
if(f.isFile()) System.out.println("file "+list[i]);
else System.out.println("dir "+list[i]);
}系统提供的delete()方法只能删除一个空目录,当要删除非空目录时,必须先删除目录中所有的内容,然后再删除该目录,应从内向外一层层删除。先创建一个链接列表类,然后将要删除的文件添加进列表。LinkedList dirs=new LinkedList(); //List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。
dirs.add(dir);当列表dirs的内容不为空即dirs.size()>0时循环删除列表中的内容。while(dirs.size()>0){
File current_dir=(File)dirs.getFirst();
File []files=current_dir.listFiles();
boolean empty_dir=true; //标示文件中单个文件是否全部删除完了
int len=files.length;
for(int i=0;i<len;i++){
if(files[i].isFile()){
System.out.println(files[i].getAbsolutePath());
files[i].delete();
}
else{
dirs.addFirst(files[i]);
empty_dir=false;
}
}
if(empty_dir){ //为真时该文件夹已为空
System.out.println(current_dir.getAbsolutePath());
current_dir.delete(); //删除
dirs.removeFirst();
}
}
解决方案 »
- insert '}' to complete classbody问题!
- ssh 连接 linux 问题
- 什么情况下会下标越界?-给出的例子是否越界了?
- 如何给JLabel绘制一条线?
- 一道计算机基础题,谁帮我分析下啊,谢谢
- 如何在Frame 上使用 Insets 类
- 数组排序
- 想检索很多文件,这些文件都有共同的名字,请问如何将他们放到一数组里?还是把文件名字放到一个数组里?
- 别的系统生成的每日销售报表.html,怎么提取里面的内容啊?
- 哪儿有applet连接服务器端数据库的例子?
- 测试你的水平:int[][] scores={{3,2,5,8},{2,9},{3,4}}创建了几个对象?
- 求一个思想关于回车符,换页符。100分马上分.
public class Main {
//list=dir.list();
public static void main(String [] args)throws Exception{
//String[] list ;
@SuppressWarnings("unused")
File dir=new File("e:" +
"");
}
final static void showAllFiles(File dir, String[] args) throws Exception{
String[] list;
if(args.length==1){
System.out.println("目录"+dir.getAbsolutePath()+"的列表");
list=dir.list();
}else{
System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
list=dir.list(new MyFileFilter(args[1]));
}
for(int i=0;i<list.length;i++){
File f;
if(args.length==0) f=new File(list[i]);
else f=new File(args[0]+"\\\\"+list[i]);
if(f.isFile()) System.out.println("file "+list[i]);
else System.out.println("dir "+list[i]);
}
}
interface Filter{
boolean accept(File f);
}}
//..........................................
import java.io.File;
import java.io.FilenameFilter;
public class MyFileFilter implements FilenameFilter { public MyFileFilter(String string) {
// TODO Auto-generated constructor stub
} @Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return false;
}}
运行无结果,怎么解释?
import java.util.LinkedList;
public class Main {
private static Object dir;
//list=dir.list();
public static void main(String [] args)throws Exception{
//String[] list ;
@SuppressWarnings("unused")
File dir=new File("e:");
}
public static void showAllFiles(File dir, String[] args) throws Exception{
String[] list;
if(args.length==1){
System.out.println("目录"+dir.getAbsolutePath()+"的列表");
list=dir.list();
}else{
System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
list=dir.list(new MyFileFilter(args[1]));
}
for(int i=0;i<list.length;i++){
File f;
if(args.length==0) f=new File(list[i]);
else f=new File(args[0]+"\\\\"+list[i]);
if(f.isFile()) System.out.println("file "+list[i]);
else System.out.println("dir "+list[i]);
}
}
public static void delete(File rootDir) throws IOException {
LinkedList dirs=new LinkedList(); //List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。
dirs.add(dir);
while(dirs.size()>0){
File current_dir=(File)dirs.getFirst();
File []files=current_dir.listFiles();
boolean empty_dir=true; //标示文件中单个文件是否全部删除完了
int len=files.length;
for(int i=0;i<len;i++){
if(files[i].isFile()){
System.out.println(files[i].getAbsolutePath());
files[i].delete();
}
else{
dirs.addFirst(files[i]);
empty_dir=false;
}
}
if(empty_dir){ //为真时该文件夹已为空
System.out.println(current_dir.getAbsolutePath());
current_dir.delete(); //删除
dirs.removeFirst();
}
}
}
interface Filter{
boolean accept(File f);
}}
//............................................
import java.io.File;
import java.io.FilenameFilter;
public class MyFileFilter implements FilenameFilter { public MyFileFilter(String string) {
// TODO Auto-generated constructor stub
} @Override
public boolean accept(File dir, String name) {
// File f ="E:\\新建文件夹";
// TODO Auto-generated method stub
// String path = f.getAbsolutePath();
// if(path.toLowerCase().endsWith(".txt")) {
return true;
// }
// return false;
}}
//想请教:代码段哪里出问题了....
package csdn;import java.io.*;
import java.util.LinkedList;public class Main { private static Object dir; // list=dir.list();
public static void main(String[] args) throws Exception {
// String[] list ;
File dir = new File("e:\\");
String s ="a";
showAllFiles(dir, s);
}
/**
* 目录列表
* @param dir 要显示的目录
* @param args 包含指定字符串
* @throws Exception
*/
public static void showAllFiles(File dir, String filter) throws Exception {
File[] list;
if (filter == null || filter.trim().length()==0) {
System.out.println("目录 " + dir.getAbsolutePath() + " 的文件及目录列表");
list = dir.listFiles();
} else {
System.out.println("目录 " + dir.getAbsolutePath() + " 中含有字符串 "
+ filter + " 的文件及目录列表");
list = dir.listFiles(new MyFileFilter(filter));
}
for (int i = 0; i < list.length; i++) {
File f = list[i];
if (f.isFile())
System.out.println("file " + list[i]);
else
System.out.println("dir " + list[i]);
}
} public static void delete(File rootDir) throws IOException {
LinkedList dirs = new LinkedList(); // List
// 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括
// null)。
dirs.add(dir);
while (dirs.size() > 0) {
File current_dir = (File) dirs.getFirst();
File[] files = current_dir.listFiles();
boolean empty_dir = true; // 标示文件中单个文件是否全部删除完了
int len = files.length;
for (int i = 0; i < len; i++) {
if (files[i].isFile()) {
System.out.println(files[i].getAbsolutePath());
files[i].delete();
} else {
dirs.addFirst(files[i]);
empty_dir = false;
}
}
if (empty_dir) { // 为真时该文件夹已为空
System.out.println(current_dir.getAbsolutePath());
current_dir.delete(); // 删除
dirs.removeFirst();
}
} } interface Filter {
boolean accept(File f);
}}MyFileFilter.javapackage csdn;import java.io.File;
import java.io.FilenameFilter;public class MyFileFilter implements FilenameFilter{
private String filters;//一个字符串
public MyFileFilter(String filters){
this.setFilters(filters);
}
public boolean accept(File dir, String name) {
if(name.indexOf(getFilters())>=0){
return true;
}
return false;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
}
package csdn;import java.io.*;
import java.util.Arrays;
import java.util.LinkedList;public class Main {
public static void main(String[] args) throws Exception {
// String[] list ;
File dir = new File("e:\\");
String[] s ={"a","源"};
showAllFiles(dir, s);
File delDir = new File("e:\\test");
delete(delDir);
}
/**
* 目录列表
* @param dir 要显示的目录
* @param args 包含指定字符串数组
* @throws Exception
*/
public static void showAllFiles(File dir, String[] filters) throws Exception {
File[] list;
if (filters==null || filters.length == 0 ) {
System.out.println("目录 " + dir.getAbsolutePath() + " 的文件及目录列表");
list = dir.listFiles();
} else {
String tmp = Arrays.toString(filters);
System.out.println("目录 " + dir.getAbsolutePath() + " 中含有字符串 "
+ tmp + " 的文件及目录列表");
list = dir.listFiles(new MyFileFilter(tmp.substring(1,tmp.length()-1)));
}
for (int i = 0; i < list.length; i++) {
File f = list[i];
if (f.isFile())
System.out.println("file " + list[i]);
else
System.out.println("dir " + list[i]);
}
}
/**
* 清空目录,从外到内
* 如目录空,删除
* 如目录不空,扫描子文件,文件删除,目录递归删除
* @param dir
* @throws IOException
*/
public static void delete(File dir) throws IOException {
if(!dir.exists()){
System.out.println("目录不存在!");
return;
}
File[] files = dir.listFiles();
if(files.length==0){
System.out.println("删除目录 "+dir.getPath()+" ...");
if(dir.delete()){
System.out.println("目录 " + dir.getPath() + " 已删除!");
}else{
System.out.println("目录 " + dir.getPath() + " 删除失败!");
}
}else{
for(int i=0;i<files.length;i++){
File f = files[i];
if(f.isFile()){
System.out.println("删除文件 "+f.getPath()+" ...");
if(f.delete()){
System.out.println("文件 "+f.getPath() +" 已删除!");
}else{
System.out.println("文件 "+f.getPath() +" 删除失败!");
}
}else{
delete(f);
}
}
System.out.println("删除目录 "+dir.getPath()+" ...");
if(dir.delete()){
System.out.println("目录 " + dir.getPath() + " 已删除!");
}else {
System.out.println("目录 " + dir.getPath() + " 删除失败!");
}
}
}
}package csdn;import java.io.File;
import java.io.FilenameFilter;public class MyFileFilter implements FilenameFilter{
private String filters;//一个字符串,如果有多个,中间由","分割
public MyFileFilter(String filters){
this.setFilters(filters);
}
public boolean accept(File dir, String name) {
String[] tmp = getFilters().split(",");
boolean flag = false;
for(int i=0;i<tmp.length;i++){
flag = flag || (name.indexOf(tmp[i].trim())>=0);
}
return flag;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
}
public class FileClear {
public static void main(String[] args)
{
FileClear.clearFiles(new File("C:\\FMSWokDir\\works\\test"), "1");
} public static boolean clearFiles(File sourceDir,String type)
{
boolean flag = false;
try
{
File[] files = sourceDir.listFiles();
//delete all files and directories
if(type.equals("2"))
{
for(File file:files)
{
if(file.isFile())
{
file.delete();
}
else
{
clearFiles(file,type);
file.delete();
}
}
}
else if (type.equals("1"))
{
for(File file:files)
{
if(file.isFile())
{
file.delete();
}
else
{
clearFiles(file,type);
}
} } }
catch(Exception e)
{
System.out.println("error:"+e.getMessage());
}
flag = true;
return flag;
}
}