2

我无法使用 Java 制作多个文件。我希望它制作 n 个相同的文件,这些文件将放置在定义的目录中。出于某种原因,现在它会创建一个文件,然后继续使用第一个文件的名称创建新文件,这基本上会刷新文件。我认为它可能会发生,因为它没有更新我的全局名称变量。到目前为止,这是我的代码:

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变量。这对我来说看起来很奇怪,让我觉得你期望它被一次又一次地重新定义。

相反,请在create()函数内重新定义 s1 变量,使其实际递增。

此外,将来在解决此类问题时,您可以使用System.out.println()语句将输出打印到控制台以跟踪程序的执行情况。对于更高级的需求,请使用日志记录解决方案或 IDE 的调试器来跟踪程序执行并插入断点。

于 2012-04-09T01:38:29.860 回答
0

字符串是不可变的,因此finName在第一次初始化后永远不会改变。

在您的创建方法中,您必须重新创建文件路径。

于 2012-04-09T01:38:53.303 回答