1

フォルダーから 150 個のファイルを読み取り、新しいフォルダーを作成し、それらの 150 個のファイルを作成して内容を書き込むプログラムを作成しました。

ここに私のコードがあります:

package TestPackage;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class EmployeeSorting {
    // path till 'employee files' folder.
    File folder = new File("D:\\Arthi iyer\\employee files");

    // listFiles() : list all the files in a folder.
    File[] listOfFiles = folder.listFiles();

    ArrayList<Employee> emp = new ArrayList<Employee>();
    String[] split_input = null;

    public void sortFiles() throws IOException {

        for (File file : listOfFiles) {
            Scanner scanner = new Scanner(file);

            String input = scanner.nextLine();
            split_input = input.split("=");
            int id = Integer.parseInt(split_input[1]);

            String input1 = scanner.nextLine();
            split_input = input1.split("=");
            String name = split_input[1];

            String input2 = scanner.nextLine();
            split_input = input2.split("=");
            int age = Integer.parseInt(split_input[1]);

            emp.add(new Employee(id, name, age));

            FileReader fr = new FileReader(file);

            BufferedReader br = new BufferedReader(fr);
            File idFile = new File("D:\\Arthi iyer\\employee id" + "\\" + id
                    + ".txt");
            FileWriter idcopy = new FileWriter(idFile);

            int idbuffersize1;
            char[] a = new char[1000];

            while ((idbuffersize1 = br.read(a)) > 0) {

                idcopy.write(a, 0, idbuffersize1);

            }

        }// for ends
    }// method ends

    public void sortByID() {

        System.out.println("----Sort By Employee Id----");
        Collections.sort(emp, new EmployeeSortById());
        printEmployees(emp);
    }

    // print employee
    public void printEmployees(ArrayList<Employee> emp) {
        for (Employee e : emp) {

            System.out.println("Id->" + e.getEmp_id() + " " + " Name-> "
                    + e.getEmp_name() + "  " + "age-> " + e.getAge());
        }
    }

    public static void main(String[] args) throws IOException {

        File id_folder = new File("D:\\Arthi iyer\\employee id");
        id_folder.mkdir(); // mkdir() for making directory.

        EmployeeSorting sort = new EmployeeSorting();
        sort.sortFiles();
        // sort.sortByID();

    }

}

私の問題は、ファイルがフォルダーに作成されているが、コンテンツが書き込まれていないことです..ガイドしてください

4

3 に答える 3

3

ライターを閉じていないため、すべてのデータはおそらく内部バッファーに留まっています。

理想的には、try-with-resources ステートメントを使用するか、finallyブロックで閉じます。

int idbuffersize1;
char[] a = new char[1000];
FileWriter idcopy = new FileWriter(idFile);
try {  
    while ((idbuffersize1 = br.read(a)) > 0) {
        idcopy.write(a, 0, idbuffersize1);
    }
} finally {
    idcopy.close();
}

余談FileWriterですが、エンコーディングを指定できるようにするのではなく、常にシステムのデフォルトのエンコーディングを使用するため、個人的には好きではありません。FileOutputStreamでラップされたを使用することを好みOutputStreamWriterます。

于 2013-06-05T06:47:20.067 に答える
0

これを試して

FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();
于 2013-06-05T06:50:19.440 に答える
0

ファイルをフラッシュまたはクローズしなかったため、コンテンツをファイルに書き込むことができませんでした。

また、通常のテキストを使用するBufferedWriterか、書くことを強くお勧めします。PrintWriter

于 2013-06-05T06:58:33.977 に答える