JAVA将任意txt文档中的内容分行存入数组

打开任意路径下一个txt文档(出窗口可以选择路径的那种)
此txt文档每行包含一个数字,一个词,例:
1美丽
2丑恶
1美好
1动听
……
每一行第一个字母存入一个数组s1,s1[1]=1,s1[2]=2,s1[3]=1,s1[4]=1……
每行后面的词同理存入字符串数组s2,s2[1]=美丽,s2[2]=丑恶……
统计出一共多少行赋给s(即多少个数字/词语),数字1的个数赋给m,数字2的个数赋给n
将所有数字1后面的词语转存入此路径下新建txt文件中,命名为abc
将所有数字2后面的词语转存入此路径下新建txt文件中,命名为def

import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test extends JFrame{
 /**
  * @param args
  */
 public static void main(String[] args) {
  new Test();
 }
 
 public Test() {
  setLayout(new FlowLayout());
  JButton button = new JButton("选择文件");
  add(button);
  button.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
    FileDialog dialog = new FileDialog(Test.this,"选择文件",FileDialog.LOAD);
    dialog.setVisible(true);
    dialog.setFilenameFilter(new FilenameFilter() {
     @Override
     public boolean accept(File dir, String name) {
      return name.lastIndexOf(".txt") > 0;
     }
    });
    String folder = dialog.getDirectory();
    String f = folder + dialog.getFile();
    System.out.println(f);
    action(f);
   }
  });
  setBounds(new Rectangle(500,300));
  setLocationRelativeTo(null);
  setVisible(true);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 private void action(String sPath) {
  BufferedReader br = null;
  try {
   br = new BufferedReader(new FileReader(sPath));
   String line = null;
   String[] s1 = {};
   String[] s2 = {};
   int m = 0,n = 0;
   StringBuffer sb1 = new StringBuffer();
   StringBuffer sb2 = new StringBuffer();
   List<String> list1 = new ArrayList<String>();
   List<String> list2 = new ArrayList<String>();
   String regex = "(\\d)([^\\d]+)";
   Pattern p = Pattern.compile(regex);
   
   while ((line = br.readLine()) != null) {
    Matcher matcher = p.matcher(line);
    if (matcher.find()) {
     String num = matcher.group(1);
     String words = matcher.group(2);
     System.out.println(num + words);
     list1.add(num);
     list2.add(words);
    }
   }
   
   s1 = new String[list1.size()];
   s2 = new String[list2.size()];
   
   for (int i=0;i<list1.size();i++) {
    s1[i] = list1.get(i);
    s2[i] = list2.get(i);
    if ("1".equals(s1[i])) {
     m++;
     sb1.append(s2[i]).append("\r\n");
    }
    if ("2".equals(s1[i])) {
     n++;
     sb2.append(s2[i]).append("\r\n");
    }
   }
   
   JOptionPane.showMessageDialog(this, "m=" + m + ",n=" + n);
   
   String folder = sPath.substring(0,sPath.lastIndexOf(File.separator));
   System.out.println(folder);
   String newpath1 = folder + File.separator + "abc.txt";
   String newpath2 = folder + File.separator + "def.txt";
   BufferedWriter bw = new BufferedWriter(new FileWriter(newpath1));
   bw.write(sb1.toString());
   bw.close();
   
   bw = new BufferedWriter(new FileWriter(newpath2));
   bw.write(sb2.toString());
   bw.close();
   
   JOptionPane.showMessageDialog(this, "处理完成!");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (br != null) {
    try {
     br.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}

追问

可以把项目压缩包传给我么?谢谢谢谢~~

追答

就这一个类呀,还要跑压缩包做什么

用的啥开发工具?

    如果用的Eclipse,新建一个Java Project,然后新建一个类Test.java,然后复制上面的代码到Test.java,然后右键run as java application。运行后会有一个窗口,单击“选择文件”按钮,选择你的文件,然后会给你提示处理结果。

    如果没用什么开发工具,复制上面的代码保存为Test.java,然后将命令行窗口打开,cd到Test.java所在的目录,然后输入javac Test.java,然后再输入java Test,就行了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-20
给你写个思路吧,用BufferedReader 的readLine()方法按行 读取txt中的数字和文字,然后用string的 substring(int 开始下标,
int 结束下标) 做截取,然后给数字做类型转换存入数组中。
第2个回答  2014-02-20
/**
* 以行为单位读取文件,常用于读面向行的格式化文件
* @param fileName 文件名
*/
public static ArrayList<String> readFileByLines(String fileName){
ArrayList<String> list = new ArrayList<String>();
File file = new File(fileName);

BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null){
list.add(tempString);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
return list;
}

给你段代码 , 自己在创建两个数组比较下 就可以了
相似回答