当前位置:编程学习 > JSP >>

多种java读写文本文件实现程序

先看最简单的 java按行读取文本文件?代码如下

 代码如下 复制代码

 FileReader reader = new FileReader("D:\www.hzhuti.com\feisanWeb\src\265_url.txt");
  BufferedReader br = new BufferedReader(reader);
  String s1 = null;
  while((s1 = br.readLine()) != null) {
  }
 br.close();
 reader.close();


下面结合数据库来操作

然而导入时怎么也无法导入,查看之后才发现,全部数据形式不带表名

 代码如下 复制代码

INSERT INTO (id, stat_date, referrer, func, catid, user_type, action_stat, channel) VALUES (240092, "2012-3-6", www.226511.cn, -10, 11611, -10, 65:4.0;57:1.0;52:1.0", "-10");

INSERT INTO (id, stat_date, referrer, func, catid, user_type, action_stat, channel) VALUES(240093, "2012-3-6", "baidu.com", -1, 10587, -10, "65:273.0", "-10");


总共6万多条;如果一个个加表名要多久呀,立即想到用程序处理一下,我们只要VALUES的值,使用sql批量插入就可以实现;

根据sql脚本的形式,我们只需要将VALUES后面括号后的“;”换成逗号,最终形式为

 代码如下 复制代码

(240092, "2012-3-6", "renren.com", -10, 11611, -10, "65:4.0;57:1.0;52:1.0", "-10"),
  (240093, "2012-3-6", "baidu.com", -1, 10587, -10, "65:273.0", "-10"),
  (240094, "2012-3-6", "baidu.com", -1, 10589, -10, "65:1040.0;57:6.0;52:10.0", "-10"),
  (240095, "2012-3-6", "qq.com", -10, 11913, -10, "65:1.0", "channelId_846"),
  (240096, "2012-3-6", "baidu.com", -1, 10581, -10, "65:1423.0;57:5.0;52:5.0", "-10"),
  (240097, "2012-3-6", "baidu.com", -1, 10583, -10, "57:20.0;52:23.0;65:2823.0", "-10"),

这样我们只需要在转换后的脚本文件开头加上

 代码如下 复制代码

INSERT INTO t_xxx (id, stat_date, referrer, func, catid, user_type, action_stat, channel)
VALUES


即可以批量插入数据库;下面是JavaIO处理程序;

   

 代码如下 复制代码
public static void main(String[] args) throws Exception{
        BufferedReader in =new BufferedReader(new FileReader("D:\sql.sql"));//要读取的文本文件
        BufferedWriter br=new BufferedWriter(new FileWriter("D:\aaa.sql"));//输出的结果文件
         String s = "";
         Pattern pattern = Pattern.compile(".*[)][;]");//正则匹配sql结尾
         Matcher m = null;
         int i = 1;
         while((s = in.readLine()) != null){
             m = pattern.matcher(s); 
             if(m.matches()){
                 System.out.println(i++);
                 s = s.replace(");", "),");//替换
             }
             if(!s.matches(" *")){//剔除空白行
                 br.write(s);
                 br.write("n");
             }
         }
         //关闭
        in.close();
        br.flush();
        br.close();
    }


执行速度很快,大约不到2秒;


/*
 * 简单的读/写文本文件的示例
 * 这里包含了三个例子,即
 * 1.
 * 2.
 * 3. 将一个文件的内容读出来写入另一个文件中
 *    同时也展示了如果从输入流中读出来内容写入输出流中(仅限文本流)
 * 三个例子可以独立存在,所以根据需要只看其中一个就行了。
 */

 代码如下 复制代码

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;


将文件读入到内存(这里是StringBuffer)的例子
public final class AccessTextFile {

    /**
     * 1. 演示将流中的文本读入一个 StringBuffer 中
     * @throws IOException
     */
    public void readToBuffer(StringBuffer buffer, InputStream is)
        throws IOException {
        String line;        // 用来保存每行读取的内容
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        line = reader.readLine();       // 读取第一行
        while (line != null) {          // 如果 line 为空说明读完了
            buffer.append(line);        // 将读到的内容添加到 buffer 中
            buffer.append("n");        // 添加换行符
            line = reader.readLine();   // 读取下一行
        }
    }

    /**
     * 2. 演示将 StringBuffer 中的内容读出到流中
     */


    public void writeFromBuffer(StringBuffer buffer, OutputStream os) {
        // 用 PrintStream 可以方便的把内容输出到输出流中
        // 其对象的用法和 System.out 一样
        // (System.out 本身就是 PrintStream 对象)
        PrintStream ps = new PrintStream(os);  
        ps.print(buffer.toString());
    }


    /**
     * 3*. 从输入流中拷贝内容到输入流中
     * @throws IOException
     */


    public void copyStream(InputStream is, OutputStream os) throws IOException {
        // 这个读过过程可以参阅 readToBuffer 中的注释
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(os));
        line = reader.readLine();
        while (line != null) {
            writer.println(line);
            line = reader.readLine();
        }
        writer.flush();   
                           
    }

文本文件的操作就这些了,有需要了解的朋友可以参考一下下。

补充:Jsp教程,Java基础 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,