2012-04-09 21 views
2

Ich habe Probleme, mehrere Dateien mit Java zu erstellen. Ich möchte, dass es eine Anzahl von identischen Dateien gibt, die in einem definierten Verzeichnis abgelegt werden. Aus irgendeinem Grund wird es jetzt 1 Datei machen und dann neue Dateien mit dem Namen der ersten Datei erstellen, die im Grunde die Datei aktualisiert. Ich denke, dass es passieren kann, weil es meine globale Namensvariable nicht aktualisiert. Hier ist mein Code so weit:Mehrere Dateien in Java erstellen

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++; 
     } 
    } 
} 

nur sehen, wenn Sie Fehler in meinem Code finden können, die dies verursachen würde passieren.

Antwort

2

Sie setzen finName einmal, wenn es initialisiert wird. Stattdessen sollten Sie es in Ihrer create() Funktion aktualisieren. Zum Beispiel:

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

Zuerst verwenden Sie Ihre i Variable in der statischen Definition Ihrer s1 variabel. Das sieht für mich komisch aus und lässt mich denken, dass Sie erwarten, dass das immer wieder neu definiert wird.

Definieren Sie stattdessen Ihre s1-Variable in Ihrer create()-Funktion neu, so dass sie tatsächlich erhöht wird.

Auch in Zukunft, wenn Sie Probleme wie diese beheben, können Sie System.out.println() Anweisungen verwenden, um die Ausgabe an die Konsole zu drucken, um die Ausführung Ihres Programms zu verfolgen. Verwenden Sie für komplexere Anforderungen eine Protokollierungslösung oder den IDE-Debugger, um die Programmausführung zu verfolgen und Haltepunkte einzufügen.

+1

Danke, das hat wirklich geholfen! Entschuldigung für meinen Mangel an Debugging-Gewohnheiten, ich bin neu in der nicht-Web-Entwicklung/Programmierung. – Kronos

+1

Keine Sorge, ich dachte nur, dass das ein hilfreicher Tipp für Sie sein könnte. Ohne einen Debugger bin ich nutzlos;) – jmort253

0

String sind unveränderlich, so finName wird nie nach der ersten Initialisierung ändern.

In Ihrer create-Methode müssen Sie Ihren Dateipfad neu erstellen.