| 输入输出流 在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;
 
 }
 
 
 |