文件读写封装

package USTC;

import java.io.*;

/**
 * <br>Title: 文件读写封装</br>
 * <br>Description: 主要封装了文件操作的类,完全可以作为一个BEAN使用</br>
 * <br>Copyright: Copyright (c) 2005</br>
 * <br>Company: </br>
 * <br>作者:汪征</br>
 * @version 1.0
 *
 */


public class FILE {
  public FILE() {

  }

  private String filePath="c:/",fileName="", fileContent=null;


  /**
   *   获取属性fileContent的值,为了能显示HTML或JSP源文件,需进行流的处理技术:
   */
  public String getFileContent()
     { try{ StringReader in=new StringReader(fileContent) ;//指向字符串的字符流。
            PushbackReader push=new PushbackReader(in);
            StringBuffer stringbuffer=new StringBuffer();
            int c;
            char b[]=new char[1];
            while ( (c=push.read(b,0,1))!=-1)//读取1个字符放入字符数组b。
              { String s=new String(b);
                if(s.equals("<"))        //回压的条件
                 {  push.unread('&');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                    push.unread('L');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                    push.unread('T');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                  }
                else if(s.equals(">"))        //回压的条件
                 {  push.unread('&');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                    push.unread('G');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                    push.unread('T');
                    push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                    stringbuffer.append(new String(b));
                 }
                else if(s.equals("/n"))
                 {  stringbuffer.append("<BR>");
                 }
                else
                 { stringbuffer.append(s);
                 }
              }
            push.close();
            in.close();
            return  fileContent=new String(stringbuffer);
          }
      catch(IOException e)
         {return fileContent=new String("不能读取内容");
         }
     }

    /**
     * 写文件
     * @param s String:将内容写入参数S中
     */
    public void setFileContent(String s)
     { fileContent=s;
      try{
          byte b[]=fileContent.getBytes("ISO-8859-1");
           fileContent=new String(b);
          File file=new File(filePath,fileName);
          FileWriter in=new FileWriter(file) ;
          BufferedWriter buffer=new BufferedWriter(in);
          buffer.write(fileContent);
          buffer.flush();
          buffer.close();
          in.close();
         }
      catch(Exception e)
         {}
     }


  /**
   * 设置该对象目录属性的文件路径值:
   * @param s String :文件路径
   */
  public void setFilePath(String s)
 {filePath=s;
   try{byte b[]=filePath.getBytes("ISO-8859-1");
       filePath= new String(b);
      }
   catch(Exception ee)
      {  }
 }

 /**
  * 得到当前设置的文件路径值:
  * @return String
  */
 public String getFilePath()
 {return filePath;
 }
 /**
  * 设置该对象的文件名:
  * @param s String
  */
 public void setFileName(String s)
 { fileName=s;
   try{byte b[]=fileName.getBytes("ISO-8859-1");
       fileName=new String(b);
      }
   catch(Exception ee)
      { }
 }
 /**
  * 得到当前设定中的文件名:
  * @return String
  */

public String getFileName()
 {return fileName;
 }


 /**
  * 列出当前对象设定目录下的文件
  * @return String[]
  */
 public String[] listFile()
{ File dir=new File(filePath);
  String file_name[]=dir.list();
  return file_name;
}
/**
 * 读取已经设定路径下目录中的文件的内容:
 * @return StringBuffer
 */
public StringBuffer readFile()
 { try{ File file=new File(filePath,fileName);
      FileReader in=new FileReader(file) ;
      PushbackReader push=new PushbackReader(in);
      StringBuffer stringbuffer=new StringBuffer();
      int c;
      char b[]=new char[1];
      while ( (c=push.read(b,0,1))!=-1)//读取1个字符放入字符数组b。
        { String s=new String(b);
            if(s.equals("<"))        //回压的条件
             {  push.unread('&');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
                push.unread('L');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
                push.unread('T');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
              }
          else if(s.equals(">"))        //回压的条件
             {  push.unread('&');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
                push.unread('G');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
                push.unread('T');
                push.read(b,0,1); //push读出被回压的字符字节,放入数组b.
                stringbuffer.append(new String(b));
             }
          else if(s.equals("/n"))
            {  stringbuffer.append("<BR>");
            }
          else
             { stringbuffer.append(s);
             }
         }
        push.close();
        in.close();
        return stringbuffer;
     }
  catch(IOException e)
     {return new StringBuffer("不能读取文件");
     }
 }
 /**
    * 从文本读出一个数据值。主要应用单文本的数字读写
    * @param FileName String
    * @throws FileNotFoundException
    * @throws IOException
    * @return int
   */
  public static int readIn(String FileName) throws FileNotFoundException, IOException {
    FileInputStream in = new FileInputStream(FileName);
    DataInputStream dataIn = new DataInputStream(in);
    int number = dataIn.readInt();
    //number++;
    in.close();
    dataIn.close();
    return number;

  }
  /**
   * 从文本写入一个数据值。主要应用单文本的数字读写
   * @param FileName String
   * @param number int
   * @throws FileNotFoundException
   * @throws IOException
   */
  public static void writeIn(String FileName,int number) throws FileNotFoundException, IOException {
    FileOutputStream out = new FileOutputStream(FileName);
    DataOutputStream dataOut = new DataOutputStream(out);
    dataOut.writeInt(number);
    out.close();
    dataOut.close();


  }

  private void jbInit() throws Exception {
  }

}

在Windows C中实现大文件的读写封装可以通过以下步骤来完成。 首先,需要使用Windows提供的API函数来操作文件。其中比较常用的函数有CreateFile、ReadFile和WriteFile等。CreateFile函数用于打开文件并返回一个文件句柄,可根据需要设置打开模式、访问权限等。ReadFile函数用于从文件中读取数据,可以指定要读取的字节数。WriteFile函数用于向文件中写入数据,同样可以指定要写入的字节数。 其次,可以封装一个读取大文件的函数。在该函数中,先通过CreateFile函数打开需要读取的大文件,并获取文件句柄。然后通过循环调用ReadFile函数读取文件内容,直到读取完整个文件。在读取过程中,可以使用一个缓冲区来存储每次读取的数据,避免频繁的文件IO操作。最后,关闭文件句柄,并释放相关资源。 再次,可以封装一个写入大文件的函数。在该函数中,先通过CreateFile函数创建要写入的大文件,并获取文件句柄。然后通过循环调用WriteFile函数将数据写入文件,直到完成全部数据的写入。同样,可以使用一个缓冲区来存储每次要写入的数据,减少文件IO操作次数。最后,关闭文件句柄,并释放相关资源。 此外,为了提高大文件读写的效率,还可以采用多线程或异步IO的方式来并行读写大文件。通过将文件分割成多个块,每个块由独立的线程或IO操作来读写,可以同时进行多个读写操作,加快文件读写速度。 综上所述,通过使用Windows提供的API函数,结合封装的读写函数以及多线程或异步IO的方式来实现大文件的读写封装,可以提高文件IO效率,满足对大文件处理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值