Java文件操作详解

输入输出流 
在Java中,我们把能够读取一个字节序列的对象称作一个输入流;而我们把够写一个字节序列称作一个输出流。它们分别由抽象类 
InputStream和OutputStream类表示。因为面向字节的流不方便用来处理存储为Unicode(每个字符使用两个字节)的信息。所以Java 
引入了用来处理Unicode字符的类层次,这些类派生自抽象类Reader和Writer,它们用于读写双字节的Unicode字符,而不是单字节字符。 
Java.io包简介 
JDK标准帮助文档是这样解释Java.io包的,通过数据流、序列和文件系统为系统提供输入输出。 
InputStream类和OutputStream类 
InputStream类是所有输入数据流的父类,它是一个抽象类,定义了所有输入数据流都具有的共通特性。 
java.io.InputStream的方法如下: 
public abstract read()throws IOException 
读取一个字节并返回该字节,如果到输入源的末则返回-1。一个具体的输入流类需要重载此方法,以提供 有用的功能。例如:在FileInputStream类中,该方法从一个文件读取一个字节。 
public int read(byte[] b)throws IOException 
把数据读入到一个字节数据中,并返回实际读取的字节数目。如果遇到流末 则返回-1,该方法最多读取b.length个字节。 
public abstract int read(byte[] b,int off,int len)throws IOException 
把数据读入到一个字节数组中并返回实际读取的字节数目。如果遇到流的末尾则的返回-1。 其中参数off表示第一个字节在b中的位置,len表示读取的最大字节数。 
public long skip(long n)throws IOException 
略过N个字节不读取,会返回实际略过的字节数目。因为数据流中剩下的数据可能不到N 个字节那么多,所以此时返回值会小于N。 
public int available()throws IOException 
read方法(包括后面要讲的OutputStream类的Write方法)都能够阴塞一个线程,直到字节被 实际读取或写入。这意味着如果一个流不能立即被读或被写 
/* 
* Created on 2005-3-10 
* To change the template for this generated file go to 
* Window>Preferences>Java>Code Generation>Code and Comments 
*/ 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.io.FileInputStream;; 
/** 
* @author zhangqinglin 
* To change the template for this generated type comment go to 
* Window>Preferences>Java>Code Generation>Code and Comments 
*/ 
public class Files 

public static void main(String[] args) throws IOException 

Files f = new Files(); 
// System.out.println(f.readFile("f:\\LinkFile.java")); 
f.fileIsNull("D:\\java\\","ejb"); 
//f.readLineFile("D:\\java\\","TestFile.txt"); 
// System.out.println(f.fileIsNull("f:\\","122.txt")); 
//f.readFolderByFile("F:\\Login"); //不区分大小写
// System.out.println(f.createAndDeleteFolder("ss","f:\\")); 
// System.out.println(f.createAndDeleteFile("f:\\ss\\","TestFile.dat")); 
//f.createAndDeleteFolder("1","D:\\java\\");
String[] ss = new String[50]; //定义对象数组
for(int i=0;i<ss.length;i++) 

ss = "信息技术和互联网(计算机软硬件,通讯) "+i; 

f.writeFile("D:\\java\\","TestFile.txt",ss); 


/** 
* 文件的写入 
* @param filePath(文件路径) 
* @param fileName(文件名) 
* @param args[] 
* @throws IOException 
*/ 
public void writeFile(String filePath,String fileName,String[] args) throws IOException 

FileWriter fw = new FileWriter(filePath+fileName); 
PrintWriter out=new PrintWriter(fw); 
for(int i=0;i<args.length;i++) 

out.write(args); 
out.println(); 
//out.flush(); 
}
System.out.println("写入成功!"); 
fw.close(); 
out.close(); 

/** 
* 文件的写入 
* @param filePath(文件路径) 
* @param fileName(文件名) 
* @param args 
* @throws IOException 
*/ 
public void writeFile(String filePath,String fileName,String args) throws IOException 

FileWriter fw = new FileWriter(filePath+fileName); 
fw.write(args); 
fw.close(); 

/** 
* 创建与删除文件 
* @param filePath 
* @param fileName 
* @return 创建成功返回true 
* @throws IOException 
*/ 
public boolean createAndDeleteFile(String filePath,String fileName) throws IOException 

boolean result = false; 
File file = new File(filePath,fileName); 
if(file.exists()){
if(file.isFile()) 

file.delete(); 
result = true; 
System.out.println("文件已经删除!"); 

else 
{
   System.out.println("对不起,该路径为目录!"); 
   
}
}
else 

file.createNewFile(); //jdk5.0的新方法
result = true; 
System.out.println("文件已经创建!"); 

return result; 

/** 
* 创建和删除目录 
* @param folderName 
* @param filePath 
* @return 删除成功返回true 
*/ 
public boolean createAndDeleteFolder(String folderName,String filePath) 

boolean result = false; 
try 

File file = new File(filePath+folderName); 
if(file.exists()) 

if(file.isDirectory()){
file.delete(); 
System.out.println("目录已经存在,已删除!"); 
result = true; 
}
else{
System.out.println("对不起,该路径为文件!"); 
}

else 

file.mkdir(); 
System.out.println("目录不存在,已经建立!"); 
result = true; 


catch(Exception ex) 

result = false; 
System.out.println("CreateAndDeleteFolder is error:"+ex); 

return result; 

/** 
* 输出目录中的所有文件及目录名字 
* @param filePath 
*/ 
public void readFolderByFile(String filePath)

File file = new File(filePath); 
File[] tempFile = file.listFiles(); 
for(int i = 0;i<tempFile.length;i++) 

if(tempFile.isFile()) 

System.out.println("File : "+tempFile.getName()); 

if(tempFile.isDirectory()) 

System.out.println("Directory : "+tempFile.getName()); 



/** 
* 检查文件中是否为一个空 
* @param filePath 
* @param fileName 
* @return 为空返回true 
* @throws IOException 
*/ 
public boolean fileIsNull(String filePath,String fileName) throws IOException 

boolean result = false; 
FileReader fr = new FileReader(filePath+fileName); 
if(fr.read() == -1) 

result = true; 
System.out.println(fileName+" 文件中没有数据!"); 

else 

System.out.println(fileName+" 文件中有数据!"); 

fr.close(); 
return result; 

/** 
* 读取文件中的所有内容 
* @param filePath 
* @param fileName 
* @throws IOException 
*/ 
public void readAllFile(String filePath,String fileName) throws IOException 

FileReader fr = new FileReader(filePath+fileName); 
//PrintWriter pr=new PrintWriter(fr);
//pr.print
int count = fr.read(); 
while(count != -1) 

System.out.print((char)count); 
count = fr.read(); 
//System.out.println();
if(count == 13) 

fr.skip(1); 
System.out.print("跳过!"); 
}

System.out.println(); 
fr.close(); 

/** 
* 一行一行的读取文件中的数据 
* @param filePath 
* @param fileName 
* @throws IOException 
*/ 
public void readLineFile(String filePath,String fileName) throws IOException 

FileReader fr = new FileReader(filePath+fileName); 
BufferedReader br = new BufferedReader(fr); 
String line = br.readLine(); 
while(line != null) 

System.out.println(line); 
line = br.readLine(); 

br.close(); 
fr.close(); 
}
}


/***************************以下是常用的文件操作方法******************************/

/** 
     *  @see 新建目录 
     *  @param  folderPath  String  如  c:/fqf 
     *  @return  boolean 
     */ 
   public  void  newFolder(String  folderPath) 

       try  { 
           String  filePath  =  folderPath; 
           filePath  =  filePath.toString(); 
           java.io.File  myFilePath  =  new  java.io.File(filePath); 
           if  (!myFilePath.exists())  
            { 
               myFilePath.mkdir(); 
           } 
       } 
       catch  (Exception  e) 
       { 
           System.out.println("新建目录操作出错"); 
           e.printStackTrace(); 
       } 
   } 
 
   /** 
     *  @see 新建文件 
     *  @param  filePathAndName  String  文件路径及名称  如c:/fqf.txt 
     *  @param  fileContent  String  文件内容 
     *  @return  boolean 
     */ 
   public  void  newFile(String  filePathAndName,  String  fileContent)  { 
 
       try  { 
           String  filePath  =  filePathAndName; 
           filePath  =  filePath.toString(); 
           File  myFilePath  =  new  File(filePath); 
           if  (!myFilePath.exists())  { 
               myFilePath.createNewFile(); 
           } 
           FileWriter  resultFile  =  new  FileWriter(myFilePath); 
           PrintWriter  myFile  =  new  PrintWriter(resultFile); 
           String  strContent  =  fileContent; 
           myFile.println(strContent); 
           resultFile.close(); 
 
       } 
       catch  (Exception  e)  { 
           System.out.println("新建文件操作出错"); 
           e.printStackTrace(); 
 
       } 
 
   } 
 
   /** 
     *  @see 删除文件 
     *  @param  filePathAndName  String  文件路径及名称  如c:/fqf.txt 
     *  @param  fileContent  String 
     *  @return  boolean 
     */ 
   public  void  delFile(String  filePathAndName)  { 
       try  { 
           String  filePath  =  filePathAndName; 
           filePath  =  filePath.toString(); 
           java.io.File  myDelFile  =  new  java.io.File(filePath); 
           myDelFile.delete(); 
           System.out.println(myDelFile + "\\文件存在,已删除。");
 
       } 
       catch  (Exception  e)  { 
           System.out.println("删除文件操作出错"); 
           e.printStackTrace(); 
 
       } 
 
   } 
 
   /** 
     *  @see 删除文件夹 
     *  @param  filePathAndName  String  文件夹路径及名称  如c:/fqf 
     *  @param  fileContent  String 
     *  @return  boolean 
     */ 
   public  void  delFolder(String  folderPath)  { 
       try  { 
           delAllFile(folderPath);  //删除完里面所有内容 
           String  filePath  =  folderPath; 
           filePath  =  filePath.toString(); 
           java.io.File  myFilePath  =  new  java.io.File(filePath); 
           myFilePath.delete();  //删除空文件夹 
 
       } 
       catch  (Exception  e)  { 
           System.out.println("删除文件夹操作出错"); 
           e.printStackTrace(); 
 
       } 
 
   } 
 
   /** 
     *  @see 删除文件夹里面的所有文件 
     *  @param  path  String  文件夹路径  如  c:/fqf 
     */ 
   public  void  delAllFile(String  path)  { 
       File  file  =  new  File(path); 
       if  (!file.exists())  { 
           return; 
       } 
       if  (!file.isDirectory())  { 
           return; 
       } 
       String[]  tempList  =  file.list(); 
       File  temp  =  null; 
       for  (int  i  =  0;  i  <  tempList.length;  i++)  { 
           if  (path.endsWith(File.separator))  { 
               temp  =  new  File(path  +  tempList[i]); 
           } 
           else  { 
               temp  =  new  File(path  +  File.separator  +  tempList[i]); 
           } 
           if  (temp.isFile())  { 
               temp.delete(); 
           } 
           if  (temp.isDirectory())  { 
               delAllFile(path+"/"+  tempList[i]);//先删除文件夹里面的文件 
               delFolder(path+"/"+  tempList[i]);//再删除空文件夹 
           } 
       } 
   } 
 
   /** 
     *  @see 复制单个文件 
     *  @param  oldPath  String  原文件路径  如:c:/fqf.txt 
     *  @param  newPath  String  复制后路径  如:f:/fqf.txt 
     *  @return  boolean 
     */ 
   public  void  copyFile(String  oldPath,  String  newPath)  { 
       try  { 
           int  bytesum  =  0; 
           int  byteread  =  0; 
           File  oldfile  =  new  File(oldPath); 
           if  (oldfile.exists())  {  //文件存在时 
               InputStream  inStream  =  new  FileInputStream(oldPath);  //读入原文件 
               FileOutputStream  fs  =  new  FileOutputStream(newPath); 
               byte[]  buffer  =  new  byte[1444]; 
               //int  length = 0; 
               while  (  (byteread  =  inStream.read(buffer))  !=  -1)  { 
                   bytesum  +=  byteread;  //字节数  文件大小 
                   System.out.println(bytesum); 
                   fs.write(buffer,  0,  byteread); 
               } 
               inStream.close(); 
           } 
       } 
       catch  (Exception  e)  { 
           System.out.println("复制单个文件操作出错"); 
           e.printStackTrace(); 
 
       } 
 
   } 
 
   /** 
     *  @see 复制整个文件夹内容 
     *  @param  oldPath  String  原文件路径  如:c:/fqf 
     *  @param  newPath  String  复制后路径  如:f:/fqf/ff 
     *  @return  boolean 
     */ 
   public  void  copyFolder(String  oldPath,  String  newPath)  { 
 
       try  { 
           (new  File(newPath)).mkdirs();  //如果文件夹不存在  则建立新文件夹 
           File  a=new  File(oldPath); 
           String[]  file=a.list(); 
           File  temp=null; 
           for  (int  i  =  0;  i  <  file.length;  i++)  { 
               if(oldPath.endsWith(File.separator)){ 
                   temp=new  File(oldPath+file[i]); 
               } 
               else{ 
                   temp=new  File(oldPath+File.separator+file[i]); 
               } 
 
               if(temp.isFile()){ 
                   FileInputStream  input  =  new  FileInputStream(temp); 
                   FileOutputStream  output  =  new  FileOutputStream(newPath  +  "/"  + 
                           (temp.getName()).toString()); 
                   byte[]  b  =  new  byte[1024  *  5]; 
                   int  len; 
                   while  (  (len  =  input.read(b))  !=  -1)  { 
                       output.write(b,  0,  len); 
                   } 
                   output.flush(); 
                   output.close(); 
                   input.close(); 
               } 
               if(temp.isDirectory()){//如果是子文件夹 
                   copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]); 
               } 
           } 
       } 
       catch  (Exception  e)  { 
           System.out.println("复制整个文件夹内容操作出错"); 
           e.printStackTrace(); 
 
       } 
 
   } 
 
   /** 
     *  @see 移动文件到指定目录 
     *  @param  oldPath  String  如:c:/fqf.txt 
     *  @param  newPath  String  如:d:/fqf.txt 
     */ 
   public  void  moveFile(String  oldPath,  String  newPath)  { 
       copyFile(oldPath,  newPath); 
       delFile(oldPath); 
 
   } 
 
   /** 
     *  移动文件到指定目录 
     *  @param  oldPath  String  如:c:/fqf.txt 
     *  @param  newPath  String  如:d:/fqf.txt 
     */ 
   public  void  moveFolder(String  oldPath,  String  newPath)  { 
       copyFolder(oldPath,  newPath); 
       delFolder(oldPath); 
 
   } 
  
   /** 
    * @see 获得系统根目录绝对路径 
    * @return String 
    *   
    */
   public String getPath(){

  String sysPath = this.getClass().getResource("/").getPath();
     //对路径进行修改
  sysPath = sysPath.substring(1, sysPath.length() - 16);
  return  sysPath;
   
   }



posted on 2006-08-04 09:23 nbt 阅读(1453) 评论(3)  编辑  收藏 所属分类: Java2SE相关

评论

# re: Java文件操作详解 2006-12-06 16:01 1

1  回复  更多评论   

# re: Java文件操作详解 2006-12-06 16:02 1

泵盔啊   回复  更多评论   

# re: Java文件操作详解 2006-12-06 16:02 1

2  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

Java技术网站

友情链接

国内一些开源网站

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜