用Java制作多个文件

时间:2012-04-09 01:31:14

标签: java file

我在使用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++;
        }
    }
}

看看你的代码中是否能找到导致这种情况发生的错误。

3 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分:1)

首先,您在i变量的静态定义中使用了s1变量。这对我来说很奇怪,让我觉得你期待一次又一次地重新定义。

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

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

答案 2 :(得分:0)

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

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