0

次の行を含むファイル「a.txt」があります。

14,15,16,17
13,16,15,14
15,17,12,13
...
...

各行には常に 4 つの列があることを知っています。

このファイルを読み取り、区切り文字 (ここでは ",") に基づいて行を分割し、各列の値を対応するファイルに書き込む必要があります。つまり、列の値が 14 の場合は、14 でダンプ/書き込みする必要があります。 .txt、15 の場合は 15.txt などに書き込まれます。

これが私が今までやったことです:

Map <Integer, String> filesMap = new HashMap<Integer, String>();
for(int i=0; i < 4; i++)
{
  filesMap.put(i, i+".txt"); 
}

File f = new File ("a.txt");
BufferedReader reader = new BufferedReader (new FileReader(f));
String line = null;
String [] cols = {};
while((line=reader.readLine()) != null)
{
    cols = line.split(",");
    for(int i=0;i<4;i++)
    {
        File f1 = new File (filesMap.get(cols[i]));
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(f1)));
        pw.println(cols[i]);
        pw.close();
    }   
}

したがって、ファイル「a.txt」の行番号 1 では、ファイル 14.txt、15.txt、16.txt、および 17.txt を開き、書き込み、閉じる必要があります。

行番号 2 についても、ファイル 14.txt、15.txt、16.txt と新しいファイル 13.txt を開き、書き込み、閉じる必要があります。

以前に開いたファイルを開いたり閉じたりする必要がない、より良いオプションはありますか。

完全な操作の最後に、開いているすべてのファイルを閉じます。

4

3 に答える 3

2

このようなものが動作するはずです:

Map <Integer, PrintWriter> filesMap = new HashMap<>();
...
if(!filesMap.containsKey(cols[i]))
{
  //add a new PrintWriter
} else
{
  //use the existing one
}
于 2013-02-05T06:17:39.700 に答える
0
 public static void main(String[] args) throws Exception {
    FileReader fr = new FileReader("a.txt");
    BufferedReader reader = new BufferedReader(fr);
    String line = "";

    while ((line = reader.readLine()) != null) {
        String[] cols = line.split(",");
        for (int i = 0; i < 4; i++) {
            FileWriter fstream = new FileWriter(cols[i] + ".txt" , true);// true is for appending the data in the file.
            BufferedWriter fbw = new BufferedWriter(fstream);

            fbw.write(cols[i] + "\n");

            fbw.close();
        }
    }
}

これを試して 。このようにしたいのだと思います。

于 2013-02-05T06:37:07.617 に答える
0

試す

    Set<String> s = new HashSet<>();
    Scanner sc = new Scanner(new File ("a.txt")).useDelimiter("[\n\r,]+");
    while(sc.hasNext()) {
        String n = sc.next();
        if (s.add(n)) {
            FileWriter w  = new FileWriter(n + ".txt");
            w.write(n);
            w.close();
        }
    }
    sc.close();
于 2013-02-05T06:21:28.397 に答える