2

Java で複数のファイルを作成するのに問題があります。定義されたディレクトリに配置されるn個の同一ファイルを作成したい。何らかの理由で、現在、1 つのファイルを作成し、最初に作成したファイルの名前で新しいファイルを作成し続けます。これにより、基本的にファイルが更新されます。グローバル名変数を更新していないために発生する可能性があると思います。これまでの私のコードは次のとおりです。

import java.io.*;


public class Filemaker{
    //defining our global variables here

    static String dir = "/Users/name/Desktop/foldername/"; //the directory we will place the file in
    static String ext = ".txt"; //defining our extension type here
    static int i = 1; //our name variable (we start with 1 so our first file name wont be '0')
    static String s1 = "" + i; //converting our name variable type from an integer to a string 
    static String finName = dir + s1 + ext; //making our full filename
    static String content = "Hello World";


    public static void create(){  //Actually creates the files 

        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(finName)); //tell it what to call the file
            out.write(content); //our file's content 
            out.close();

            System.out.println("File Made."); //just to reassure us that what we wanted, happened
        } catch (IOException e) {
            System.out.println("Didn't work");
        }
    }


    public static void main(String[] args){

        int x = 0;

        while(x <= 10){ //this will make 11 files in numerical order
            i++; 
            Filemaker.create();
            x++;
        }
    }
}

これが発生する原因となるコードのエラーを見つけることができるかどうかを確認してください。

4

3 に答える 3

2

finName初期化時に一度設定します。代わりに、create()関数で更新する必要があります。例えば:

public static void create(){  //Actually creates the files 
    String finName = dir + i + ext; 
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter(finName)); //tell it what to call the file
        out.write(content); //our file's content 
        out.close();

        System.out.println("File Made."); //just to reassure us that what we wanted, happened
    } catch (IOException e) {

        System.out.println("Didn't work");
    }
}
于 2012-04-09T01:36:11.933 に答える
1

まず、i変数の静的定義で変数を使用していs1ます。これは私には奇妙に見え、何度も何度も再定義されることを期待していると思います。

代わりに、関数内で s1 変数を再定義してcreate()、実際に増分するようにします。

また、将来、このような問題のトラブルシューティングを行うときに、System.out.println()ステートメントを使用して出力をコンソールに出力し、プログラムの実行を追跡できます。より高度なニーズについては、ロギング ソリューションまたは IDE のデバッガーを使用して、プログラムの実行をトレースし、ブレークポイントを挿入します。

于 2012-04-09T01:38:29.860 に答える
0

文字列は不変であるためfinName、最初の初期化後に変更されることはありません。

create メソッドでは、ファイル パスを再作成する必要があります。

于 2012-04-09T01:38:53.303 に答える