-2

タイトルのように、後ろからテキストを書き、テキストファイルに入力したいと思います。最初に、テキストファイルからテキストを読み取り、次にテキストファイルに保存したいのですが、最後までに書き込みます。コードを修正する方法がわかりません。私のコードは、テキストファイルを読み取り、テキストファイルを書き込みますが、最初から最後まで同じ順序で書き込みます。

それがどのように機能しなければならないかの例:

入力テキスト:

aaaaa
bbbb
ccc
dd
f

出力テキスト:

f
dd
ccc
bbbb
aaaaa

私のコード:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

public class Loading {

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "file.txt.txt"));
            String line, txt = "";
            String[] splittedLine;
            while ((line = br.readLine()) != null) {
                txt += linia + "\n";
                splittedLine = line.split(" ");
            }
            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("file2"));
            bw.write(txt);
            bw.newLine();
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
4

4 に答える 4

1

ファイルを文字列に読み込む

文字列データを最後からファイルに書き込みます。

行の場合は、文字列配列を使用してファイルのデータを格納し、配列の最後から最初までトラバースします。

これが完全なプログラムです。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class Loading {

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "DB.xml"));
            String line, txt = "";
            List<String> lines = new ArrayList<String>();
            while ((line = br.readLine()) != null) {
                lines.add(line);
            }
            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("file2"));
            for(int i=lines.size()-1; i>=0; i--){
            bw.write(lines.get(i));
            bw.newLine();
            }
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
于 2013-01-03T23:01:00.920 に答える
1

エントリの数が事前にわからないため、行のリストが必要になります。そのため、コードとともに拡張できるものが必要になります。

List<String> lines = new ArrayList<String>();

そしてそれにすべての行を追加します

while ((line = br.readLine()) != null) {
    lines.add(line);
}

次に、それらを逆の順序でファイルに書き込みます。

for(int i = lines.size() - 1; i >= 0; i--) {
    bw.write(lines.get(i));
    bw.newLine();
}
于 2013-01-03T23:03:21.777 に答える
1

コードが文字列を正しく連結していません。順序を逆にしようとしている場合は、文字列の最後ではなく最初に行テキストを追加する必要があります。

txt = line + txt + "\n";  //original: txt += linia + "\n"

ただし、StringBuilderオブジェクトを使用して連結を処理することをお勧めします。何かのようなもの...

StringBuilder txt = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    txt.insert(0, line + "\n");
}
System.out.println(txt.toString());

私は、他の回答の配列アプローチも機能し、おそらく読みやすく、保守しやすいことに同意します。しかし、StringBuilderのアプローチは、すでに持っているものに近いものです。

于 2013-01-03T23:24:26.350 に答える
0

それは動作するはずです:

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

/**
 *
 * @author 
 */
public class Read {
        public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "D:/file.txt"));
            String line, txt = "";
            ArrayList<String> lines = new ArrayList<String>();

            while ((line = br.readLine()) != null) {
                lines.add(line);
            }



            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("D:/file2.txt"));
            for(int i = lines.size()-1; i>=0; i--){
                bw.write(lines.get(i));
                bw.newLine();
            }
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
于 2013-01-03T23:16:51.747 に答える