java 文件操作

==============================================================

java程序的递归算法,列出某个目录下的所有子目录和文件

<script src="/ad/js/edu_left_300-300.js" language="javascript" type="text/javascript"> </script>
import java.io.*;

class DiGui
{
static void getDir(String strPath) throws Exception
{
try
{
File f=new File(strPath);
if(f.isDirectory())
{
File[] fList=f.listFiles();
for(int j=0;j<fList.length;j++)
{
if(fList[j].isDirectory())
{
System.out.println(fList[j].getPath());
getDir(fList[j].getPath()); //在getDir函数里面又调用了getDir函数本身
}
}
for(int j=0;j<fList.length;j++)
{

if(fList[j].isFile())
{
System.out.println(fList[j].getPath());
}

}
}
}
catch(Exception e)
{
System.out.println("Error: " + e);
}

}

public static void main(String[] args)
{
String strPath="e://cqq";
System.out.println(strPath);

try
{
getDir(strPath);
}
catch(Exception e)
{

}
}
}
====================================================================

使用递归方法删除文件

删除一个非空目录并不是简单地创建一个文件对象,然后再调用delete()就可以完成的。要在平台无关的方式下安全地删除一个非空目录,你还需要一个算法。该算法首先删除文件,然后再从目录树的底部由下至上地删除其中所有的目录。



只要简单地在目录中循环查找文件,再调用delete就可以清除目录中的所有文件:

static public void emptyDirectory(File directory) {

    File[ ] entries = directory.listFiles( );

    for(int i=0; i<entries.length; i++) {

        entries[i].delete( );

    }

}


这个简单的方法也可以用来删除整个目录结构。当在循环中遇到一个目录时它就递归调用deleteDirectory,而且它也会检查传入的参数是否是一个真正的目录。最后,它将删除作为参数传入的整个目录。

static public void deleteDirectory(File dir) throws IOException {

    if( (dir == null) || !dir.isDirectory) {

        throw new IllegalArgumentException(

                  "Argument "+dir+" is not a directory. "

              );

    }



    File[ ] entries = dir.listFiles( );

    int sz = entries.length;



    for(int i=0; i<sz; i++) {

        if(entries[i].isDirectory( )) {

            deleteDirectory(entries[i]);

        } else {

            entries[i].delete( );

        }

    }



   dir.delete();

}


在Java 1.1以及一些J2ME/PersonalJava的变种中没有File.listFiles方法。所以只能用File.list,它的返回值一个字符串数组,你要为每个字符串构造一个新的文件对象。

================================================================================

java文件操作大全


文件的建立/检查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件的建立、检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//检查File.txt是否存在
f.delete();//删除File.txt文件
out.println(path + "//File.txt 存在,已删除。");
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文件
out.println(path + "//File.txt 不存在,已建立。");//输出目前所在的目录路径
}
%>

目录的建立/检查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目录的建立/检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "//Sub";//将要建立的目录路径
File d=new File(path);//建立代表Sub目录的File对象,并得到它的一个引用
if(d.exists()){//检查Sub目录是否存在
d.delete();
out.println("Sub目录存在,已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已建立");
}
%>
</body>
</html>


如何在JSP中处理虚拟目录
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目录</title>
</head>
<body>
取得虚拟目录对应的磁盘路径<br>
Web站点主目录的位置为<font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP网页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP网页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>


文件属性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文件属性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的属性如下:<br><br>
文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目录":"不是目录"%><br>
<%=f.canRead()?"可读取":"不可读取"%><br>
<%=f.canWrite()?"可写入":"不可写入"%><br>
<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%><br>
文件的最后修改日期为:<%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件
%>
<%=f.getName()%>的属性如下:<br><br>
文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目录":"不是目录"%><br>
<%=f.canRead()?"可读取":"不可读取"%><br>
<%=f.canWrite()?"可写入":"不可写入"%><br>
<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%><br>
文件的最后修改日期为:<%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>


取出目录中文件的方法
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目录中文件的方法--列出目录中的文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("<font color=#ff0000>" + path + "目录下的文件:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目录下的目录:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>


判断是否为空白文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判断是否为空白文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "//AtEnd.txt");//建立FileReader对象,并实例化为fr
//对FileReader类生成的对象使用read()方法,可以从字符流中读取下一个字符。
if(fr.read()==-1)//判断是否已读到文件的结尾
{
out.print("AtEnd.txt文件中没有数据<br>");
}else{
out.println("AtEnd.txt文件中有数据");
}
fr.close();
%>
</body>
</html>


读取所有的文件数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>读取所有的文件数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "//ReadData.txt");
//关键在于读取过程中,要判断所读取的字符是否已经到了文件的末尾,并且这个字符是不是文件中的断行符,即判断该字符值是否为13。
int c=fr.read();//从文件中读取一个字符
//判断是否已读到文件结尾
while(c!=-1){
out.print((char)c);//输出读到的数据
c=fr.read();//从文件中继续读取数据
if(c==13){//判断是否为断行字符
out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字符
//c=fr.read();//读取一个字符
}
}
fr.close();
%>
</body>
</html>


一行一行读取数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件读取</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得当前目录的路径
FileReader fr=new FileReader(path + "//file//inc//t.txt");//建立FileReader对象,并实例化为fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();//从文件读取一行字符串
//判断读取到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中读取的数据
Line=br.readLine();//从文件中继续读取一行数据
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件
%>
</body>
</html>


略过文件中的字符不读取
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略过字节不读取</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "//ReadData.txt");
fr.skip(2);//跳过2个字节
int c=fr.read();//读取一个字节
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>


将数据写入文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将数据写入文件</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "//WriteData.txt");//建立FileWriter对象,并实例化fw
//将字符串写入文件
fw.write("大家好!");
fw.write("本书是《JSP编程技巧》");
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "//WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();
//读取一行数据
out.println(Line + "<br>");
br.close();//关闭BufferedReader对象
fr.close();
%>
</body>
</html>


将写入文件的数据分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "//WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP编程技巧》。");
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: stride@sina.com");
bw.flush();//将数据更新至文件
fw.close();//关闭文件流
out.println("写入文件内容为:<br>");
FileReader fr=new FileReader(path + "//WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//读取一行数据
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>

如何将数据追加写入到文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "//WriteData.txt","rw");//定义一个类RandomAccessFile的对象,并实例化
rf.seek(rf.length());//将指针移动到文件末尾
rf.writeBytes("/nAppend a line to the file!");
rf.close();//关闭文件流
out.println("写入文件内容为:<br>");
FileReader fr=new FileReader(path + "//WriteData.txt");
BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();//关闭文件
%>
</body>
</html></I></I></I></I>

=================================================================================

在Java实现Dos中的文件操作命令功能

这几天要对项

目进行修改,主要是添加对文件操作的功能。如,删除一条信息后要同时删除它所带的附件。于是在空闲时间,决定把功能扩大一下,做一套用Java实现的Dos命令的简单版本。Java的IO中,要对文件进行操作用的是class File(InputStream之类的我把它们视为是对文件内容进行操作的class)。所以,我们要用的的操作都是通过File这个类来实现的。下面,我们将实现所要的功能。
一.    File Class
1.    class File对象描述了所指定路径下的文件和目录的信息。通过File对象,可以查看某个路径下的文件和目录信息,并可操作路径下的文件和目录。
2.    class File的应用
2.1    查看(查询)某个路径下的文件信息。
2.1.1    class File的构造函数
class File有两类构造函数,一类带有一个参数,用于产生一个描述参数所所指向的路径下的文件系统的对象;另一类带有两数,第一个参数表示路径,第二个参数表示子目录,用来产生描述第一个参数所指向的路径下的某个子目录的文件信息,子目录名称由第二个参数指定。如:
File path = new File(“c://”);产生一个描述c:/下的文件信息的对象
File path = new File(“c://”, “test”);产生一个描述c:/的test子目录的文件信息的对象。
2.1.2    list()和list(FilenameFilter filter)函数
1)    list()函数以String数组的形式返回一个File对象所描述的文件信息。返回的是路径下的所有文件和目录的文件名和目录名。
2)    list(FilenameFilter filter)函数则提供了查询功能,通过它可能查询出满足特定条件的文件名和目录名。
2.1.3    用FinenameFilter接口进行文件或目录的查询
2.1.3.1.    这个接口只包含一个函数:boolean accept(File dir, String name),第二个参数代表一个文件或目录的名称,第一个参数代表文件或目录所在的目录的名称。当返回true,表示文件满足查询条件,要被放入结果中;否则,表示文件不满足要求。
2.1.3.2.    工作原理
当调用某个File对象的list(FilenameFilter filter)函数时, 会对File对象中的每一个文件或目录调用参数filter中的accept()方法。在对一个文件或目录调用accept()函数时把它的名称以及一个描述它所在的目录的File对象作为参数传给accept()函数。
2.1.4    一个简单的实例
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. class DirList{
  4.     public void printFile(String dir, String filter){
  5.         File path = new File(dir);
  6.         String[] fileList;
  7.         if(filter.length()==0){
  8.             System.out.println("/nAll file:");
  9.             fileList = path.list(); //取得所有文件信息
  10.         }
  11.         else{
  12.             System.out.println("/nAll file including " + filter);
  13.             //取得满足查询条件的文件信息
  14.             fileList = path.list(new DirFilter(filter));
  15.         }
  16.         for(int i=0; i<fileList.length; i++)
  17.             System.out.println(fileList[i]);
  18.     }
  19.     public void printFile(String dir){
  20.         printFile(dir, "");
  21.     }
  22. }
  23. class DirFilter implements FilenameFilter{
  24.     String afn; //存放查询条件
  25.     DirFilter(String afn) { this.afn = afn; }
  26.     //满足查询条件,返回true
  27.     public boolean accept(File dir, String name){
  28.         return name.indexOf(afn)!=-1;
  29.     }
  30. }
  31. public class TestIO{
  32.     public static void main(String[] args){
  33.         DirList dirList = new DirList();
  34.         //显示F:/test下的文件信息
  35.         dirList.printFile("F://test");
  36.         //显示F:/test下名称包含“.rar”文件信息
  37.         dirList.printFile("F://test"".rar");
  38.         //显示F:/test下名称包含“r”文件信息
  39. dirList.printFile("F://test""r");
  40.     }
  41. }

这个只是一个简单的例子,只要完善accept()函数,你也可以做出一个Java版的dir命令来。
2.2    当然,我们还能通过File来文件或目录进行创建、删除和改名的操作。
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. import java.util.Date;
  4. import java.text.SimpleDateFormat;
  5. class DirFilter implements FilenameFilter{
  6.     String afn;
  7.     DirFilter(String afn) { this.afn = afn; }
  8.     public boolean accept(File dir, String name){
  9.         return name.indexOf(afn)!=-1;
  10.     }
  11. }
  12. class OptFile{
  13.     public static String getAbsolutePath(File f){
  14.         return f.getAbsolutePath();
  15.     }
  16.     public static String getPath(File f){
  17.         return f.getParent();
  18.     }
  19.     public static String getName(File f){
  20.         return f.getName();
  21.     }
  22.     public static long getLength(File f){
  23.         return f.length();
  24.     }
  25.     public static String getParent(File f){
  26.         return f.getParent();
  27.     }
  28.     public static String getLastModified(File f, String format){
  29.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  30.         if(format.equals("ymdh"))
  31.             sdf = new SimpleDateFormat("yyyy-MM-dd hh");
  32.         else if(format.equals("ymdhm"))
  33.             sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
  34.         return sdf.format((new Date(f.lastModified())));
  35.     }
  36.     public static String getLastModified(File f){
  37.         return getLastModified(f, "ymd");
  38.     }
  39.     public static boolean canRead(File f){
  40.         return f.canRead();
  41.     }
  42.     public static boolean canWrite(File f){
  43.         return f.canWrite();
  44.     }
  45.     public static boolean isFile(File f){
  46.         return f.isFile();
  47.     }
  48.     public static boolean isDir(File f){
  49.         return f.isDirectory();
  50.     }
  51.     public static boolean rename(File oldName, File newName){
  52.         return oldName.renameTo(newName);
  53.     }
  54.     public static boolean delete(File f){
  55.         return f.delete();
  56.     }
  57.     public static boolean mkdir(File f){
  58.         return f.mkdirs();
  59.     }
  60.     /**
  61.      * 从指定路径中查询文件
  62.      */
  63.     public static File[] findFile(String filePath, String fileName){
  64.         File f = new File(filePath);
  65.         File[] result = f.listFiles(new DirFilter(fileName));
  66.         return result;
  67.     }
  68.     public static void printFileAtt(File f){       
  69.         System.out.println(
  70.             " Absolute path: " + getAbsolutePath(f) +
  71.             "/n Can read: " + canRead(f) +
  72.             "/n Can write: " + canWrite(f) + 
  73.             "/n path: " + getPath(f) +
  74.             "/n name: " + getName(f) +
  75.             "/n parent: " + getParent(f) +
  76.             "/n length: " + getLength(f) +
  77.             "/n lastModified: " + getLastModified(f));
  78.         if(isFile(f))
  79.             System.out.println(" it's a file");
  80.         else if(isDir(f))
  81.             System.out.println(" it's a directory");
  82.     }
  83. }
  84. public class TestIO{
  85.     public static void main(String[] args){
  86.         File f1 = new File("F://nepalon//thinkinginjava//test");
  87.         File f2 = new File("F://nepalon//thinkinginjava//test//aa ");
  88.         OptFile.printFileAtt(f1);
  89.         OptFile.printFileAtt(f2);
  90.         //当对文件或目录进行改名,且更新到一个不同的下时,
  91.         //会先把文件或整个目录剪切到新目录下,再重新命名
  92.         File nf2 = new File("F://nepalon//thinkinginjava//使用log4j.files");
  93.         if(OptFile.rename(f2, nf2)){
  94.             System.out.println("after rename f2:");
  95.             OptFile.printFileAtt(nf2);
  96.         }
  97.         else
  98.             System.out.println("rename nf2 failly");
  99.       //进行删除操作时,只能删除文件;如果删除的是目录,会返回false
  100.         File df = new File("F://nepalon//thinkinginjava//test//1001.doc");
  101.         if(OptFile.delete(df))
  102.             System.out.println("Delete df successfully");
  103.         else
  104.             System.out.println("Delete df failly");
  105.         System.out.println("Find file with name /"1001/"");
  106.         OptFile.findFile("F://nepalon//thinkinginjava//test""1001");
  107.         File mf = new File("F://nepalon//thinkinginjava//test//1001");
  108.         if(OptFile.mkdir(mf))
  109.             System.out.println("create directory mf successfully");
  110.         else
  111.             System.out.println("create directory mf failly");
  112.     }
  113. }
=================================================================================



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值