Prüfen ob eine Datei existiert, in java

Also das folgende Programm soll eine Eingabe-und Ausgabedatei als Kommandozeilen-Argumente.

class FileCopy
{
public static void main(String[] args) throws IOException
{
    String infile = null;
    String outfile = null;
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));    

    if (args.length >= 2) //both files given via command line
    {
        infile = args[0];
        if (fileExists(infile) == false)
        {
            infile = getInputFile();
        }
        outfile = args[1];
    }
    else if (args.length == 1) //input file given via command line
    {
        infile = args[0];
        outfile = getOutputFile(infile);
    }
    else //no files given on command line
    {
        infile = getInputFile();
        outfile = getOutputFile(infile);
    }

    //create file objects to use
    File in = new File(infile);
    File out = new File(outfile);

    /*
     *rest of code
     */
}

//get the input file from the user if given file does not exist
public static String getInputFile() //throws IOException
{
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    String fileName = null;
    boolean haveFile = false;

    while(haveFile == false)
    {
        System.out.println("Enter a valid filename for input:");
        System.out.print(">> ");
        try
        {
            fileName = stdin.readLine();
        }
        catch (IOException e)
        {
            System.out.println("Caught exception: " + e);
        }
        haveFile = fileExists(fileName);
    }

    return fileName;    
}

//get the output file and test things
public static String getOutputFile(String infile)
{
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    File input = new File(infile);
    String filename = null;
    boolean more = true;
    while(more)
    {
        System.out.println("Enter a valid filename for output:");
        System.out.print(">> ");
        try
        {
            filename = stdin.readLine();
        }
        catch (IOException e)
        {
            System.out.println("Caught exception: " + e);
        }
        File output = new File(filename);
        if (output.exists())
        {
            more = false;
        }
        if (filename == infile)
        {
            int selection;
            String inputString = null;

            System.out.println("The output file given matches the input file. Please choose an option:");
            System.out.println("1) Enter new filename");
            System.out.println("2) Overwrite existing file");
            System.out.println("3) Backup existing file");
            System.out.print(">> ");
            try
            {
                inputString = stdin.readLine();
            }
            catch (IOException e)
            {
                System.out.println("Caught exception: " + e);
            }
            selection = Integer.valueOf(inputString);
            switch (selection)
            {
                case 1: //new filename
                case 2: //overwrite
                case 3: //backup
                default: System.exit(0);
            }
        }
    }
    return null;
}

//check the given file to see if it exists in the current working directory
public static boolean fileExists(String n)
{
    return (new File(n)).exists();
}
}
  • Sie vereinfachen könnten, indem diese unten nur public static boolean fileExists(String n) { return n.length > 0 && new File(n).exists(); } Und sind Sie überzeugt, dass mit diesem "input.txt" in Ihrem classpath? Versuchen Sie, erstellen Sie eine neue Datei in die Methode und sehen, wo er es schafft.
  • nicht ein code-problem in fileExists, suchen Sie für Ihr problem woanders. BTW, wenn Sie wollen überprüfen Sie Ihre areguments sind OK, Sie haben zu prüfen n!=null zu
  • Nicht den string, den Sie übergeben, enthalten die Laufwerksbuchstaben zu? Ich in der Regel beginnen, indem Sie den ganzen Pfad wie "c:/temp/myfile.txt" dann, sobald Sie wissen, die Methode funktioniert, können Sie weiter zu suchen. Drucken Sie den Wert von n, wenn es läuft, ist die Datei im Ziel-Ordner oder Ordner "bin"? Das ist normalerweise das Arbeitsverzeichnis, wenn es ausgeführt wird.
  • die Art und Weise input.txt gegeben wird, ist über die Kommandozeile, ich bin mit java FileCopy.java input.txt und dann ziehen Sie es von der args[] array in der main (das ist erforderlich für dieses Programm).
  • und Nein, der string enthält nicht den Laufwerksbuchstaben oder den vollständigen Pfad, nur den Dateinamen. So wie ich das verstehe file.exists() ist, dass, wenn die Datei, die überprüft wird, ist im gleichen Verzeichnis wie das java-Programm, dann wird der vollständige Pfad ist nicht notwendig, oder sollte nicht sein
  • auch habe ich gerade versucht, geben Sie den vollständigen Dateipfad, funktioniert es nicht
  • Es klingt wie Sie nicht wissen, für sicher, dass Ihre Datei in das gleiche Verzeichnis. Wie ich schon in meinem vorherigen Kommentar, nur ein new File(n).createNewFile(); und sehen, ob es in dem Verzeichnis, das Sie erwartet hatten.
  • und für die besser helfen, schneller, enthält die Informationen-in diesem Fall, sagen Sie uns, was Datei, die Sie eingeben, vielleicht ein Bild von dem Verzeichnis. Ist es Unix-basiert ist, sind Sie sicher, dass über groß-und Kleinbuchstaben? Wie andere gesagt haben, ist der code richtig ist, gibt es ein problem irgendwo anders in dem, was Sie tun.
  • ich, um zu sehen, was passiert ist, und eine Datei wurde nicht erstellt.
  • Ich habe keine Ahnung, was ich tun, ich wusste nicht, ob der code wurde direkt aus der sich gehen, und wollte nicht wissen, andere Informationen war nötig. Ich bin Windows 7 ausgeführt, mit Java-1.6u34, ich bin Eingabe der Zeichenfolge java FileCopy input.txt über die Kommandozeile (wo FileCopy, ist die class-Datei) und unter input.txt aus dem args [] - array in main. Wenn du willst, ich poste das ganze Programm so wie es da steht.
  • Vielleicht war es in einem Verzeichnis, das Sie gar nicht bewusst sind. Ich glaube nicht, ich habe gehört, der createNewFile fehlschlagen.
  • nope, es funktioniert nicht. Mit Windows 7 ist die Globale Suchleiste im start-Menü, input.txt nicht gefunden überall auf meinem computer. Das ist in der Tat sehr seltsam.
  • Sollten Sie eine System.out.println("fileExists: " + n); in den Anfang der Methode zu sehen, wenn etwas nicht mit der Variablen. (Um sicherzustellen, dass es immer die Argumente korrekt)
  • und jetzt entdecke ich, dass das Programm nicht einmal dass es fileExists... ich werde um den vollständigen code in den OP, vielleicht lassen Sie die Menschen finden, die das Problem besser.
  • in getOutputFile, du machst einen System.exit(0), die in der Nähe aus Ihrem Programm. Deshalb ist nichts passiert.
  • Aber das Programm wird nie ausgeführt, dass weit? Die flow-Muster, die ich habe ist die main -> getInputFile -> für immer bleiben in der while-Schleife. Das Programm hört nie ausführen für mich.

Schreibe einen Kommentar