ssk110
2011-09-14 13:56 阅读 357
已采纳

java读取txt写入数据库的问题.

有一个txt文档,格式如下:

[color=green][分类名] 文本内容

[分类名] 文本内容

[分类名] 文本内容[/color]

如何写入数据库中(oracle 10g)
要求 [color=green][][/color] 不写入数据库,分类名和文本内容用空格隔开,各行之间有空格,如果分类名相同则只能在数据库中存在一条记录,而分类名相同的文本内容都要追加到这条记录上.

图片在附件里

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

9条回答 默认 最新

  • 已采纳
    zs_show zs_show 2011-09-14 16:56

    long start = System.currentTimeMillis();
    File file = new File("test.txt");
    Map map = new HashMap();
    try {
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader bf = new BufferedReader(isr);
    String str = "";
    while((str = bf.readLine()) != null){
    // String[] s = str.split(" ");
    // System.out.println(str);
    if(!"".equals(str.trim())){
    String[] s = new String[2];
    s[0] = str.substring(0,str.indexOf(" "));
    s[1] = str.substring(str.indexOf(" ")+1);
    // for (int i = 0; i < s.length; i++) {
    if(s[0].indexOf("[") != -1){
    String bookName = s[0].substring(1,s[0].length() - 1);
    if(map.containsKey(bookName)){
    String bookNames = map.get(bookName) + "," + s[1];
    map.put(bookName, bookNames);
    }else{
    map.put(bookName, s[1]);
    }
    // }
    }
    }
    }

            for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
                Entry<String, String> type = (Entry<String, String>) iterator.next();
                System.out.println(type.getKey() + ":" + type.getValue());
            }
    
            long end = System.currentTimeMillis();
            System.out.println(end - start);
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    我想这个方法更好

    点赞 评论 复制链接分享
  • lishixiong01 lishixiong01 2011-09-14 15:13

    我想请问一下 [分类名]和 “文本内容”之间是否有空格呢?

    点赞 评论 复制链接分享
  • lishixiong01 lishixiong01 2011-09-14 15:32

    可以试下这种方法

    public class test {
    public static void main(String[] args) {
    String str="[分类名] 文本内容 [分类名] 文本内容";
    String [] strs = str.split(" ");
    for(int i=0;i<strs.length;i++){
    if(!strs[i].equals("")){
    String [] s = strs[i].split("]");
    String title = s[0].replace("[", "");
    String content = s[1];
    System.out.println(title+"===="+content);
    }
    }
    }
    }

    打印出来的值为 :
    分类名==== 文本内容
    分类名==== 文本内容

    点赞 评论 复制链接分享
  • lishixiong01 lishixiong01 2011-09-14 15:39

    这个方法更好,上个方法有局限性 建议楼主用这个方法:
    public static void main(String[] args) {
    String str="[分类名] 文本内容 [分类名] 文本内容";
    str =str.replace("[", "-");
    String [] strs = str.split("-");
    for(int i=0;i<strs.length;i++){
    if(!strs[i].equals("")){
    String [] s = strs[i].split("]");
    String title = s[0];
    String content = s[1];
    System.out.println("标题:"+title+"====="+"内容:"+content);
    }
    }
    }

    打印内容:
    标题:分类名=====内容: 文本内容

    标题:分类名=====内容: 文本内容

    取出值后楼主应该会添加入库吧 呵呵

    点赞 评论 复制链接分享
  • zs_show zs_show 2011-09-14 16:02

    long start = System.currentTimeMillis();
    File file = new File("test.txt");
    Map map = new HashMap();
    try {
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader bf = new BufferedReader(isr);
    String str = "";
    StringBuffer sb = new StringBuffer();
    while((str = bf.readLine()) != null){
    sb.append(str);
    }
    str = sb.toString();
    String[] s = str.split(" ");
    for (int i = 0; i < s.length; i++) {
    if(s[i].indexOf("[") != -1){
    String bookName = s[i].substring(1,s[i].length() - 1);
    if(map.containsKey(bookName)){
    String bookNames = map.get(bookName) + "," + s[i+1];
    map.put(bookName, bookNames);
    }else{
    map.put(bookName, s[i+1]);
    }
    }
    }
    for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
    Entry type = (Entry) iterator.next();
    System.out.println(type.getKey() + ":" + type.getValue());
    }

            long end = System.currentTimeMillis();
            System.out.println(end - start);
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    不知道符不符合你的要求

    点赞 评论 复制链接分享
  • zs_show zs_show 2011-09-14 16:17

    这个方法局限性很大,每行后面也要空格,如果每行后面没空格应该放在while循环里

    点赞 评论 复制链接分享
  • zs_show zs_show 2011-09-14 16:57

    最后一行不能有回车

    点赞 评论 复制链接分享
  • zs_show zs_show 2011-09-14 19:34

    上面那个方法好像没有什么局限性啊 好像可以符合你的要求吧

    点赞 评论 复制链接分享
  • iteye_15107 iteye_15107 2015-07-13 09:17

    相比JAVA复杂的硬代码,用集算器做会比较简单,还能方便嵌入JAVA(参考[url]http://blog.raqsoft.cn/?p=4792[/url] ),脚本如下:
    A1=file("E:\s.txt").import@i()
    A2=A1.select(~).(~.array@t("")).new(~(1):分类,~(2):内容) //去空行,创建分类和内容列的序表
    A3=A2.group(分类).new(分类.~,~.(内容).string():内容) //按分类分组,将内容拼接到一起
    A4 >db.update(A3,tableName,col1:分类,col2:内容)

    点赞 评论 复制链接分享

相关推荐