Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen

  • Themenstarter Themenstarter Gelöschtes Mitglied 65862
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 65862

Gast
Hallo Zusammen,

ich muss für mein aktuelles Projekt eine Datei auswählen, die ich dann über einen OutputStream an einen Switch senden muss.

So wähle ich die Datei aktuell aus:
[CODE lang="java" title="Datei auswählen"] String filePath = "C:\\Abschlussprojekt\\eclipse\\switchbespielung\\w8003337.txt";
String path = filePath.replace("\\", "/");[/CODE]

Allerdings ist es so, dass der Dateiname nicht immer der gleiche ist, sondern variiert, z.B. w8003361.txt.
Die Textdatei wird aktuell in diesem Ordner gespeichert -> "C:\Abschlussprojekt\eclipse\switchbespielung\Test_Ordner_Template_Download" und wird nach jeder Verwendung gelöscht, sodass sich in dem Ordner immer nur eine .txt-Datei befindet.


Nun zur Frage:

Ist es möglich, mit dem oben aufgeführten Code, die Datei aus meinem neuen Ordner auszuwählen, ohne den Dateiname im Dateipfad angeben zu müssen?
Zum Beispiel mithilfe eines Platzhalters?


Ich bin für jede Hilfe sehr dankbar 🙂
 
Schau dir doch einmal java.io.File.list() an.
Zunächst vielen Dank für deine Antwort.

An File.list() hab ich auch schon gedacht, allerdings bleibe ich hier an einer Stelle hängen und komme nicht weiter.

[CODE lang="java" title="Code"]private void list(String[] args)
{
String[] pathnames;

File f = new File("C:\\Abschlussprojekt\\eclipse\\switchbespielung\\Test_Ordner_Template_Download");

pathnames = f.list();

for (String pathname : pathnames)
{
System.out.println(pathname);
}
}[/CODE]

Wie man sieht will ich hier alle Dateien in dem angegebenen Pfad/Ordner ermitteln. Dabei soll wie bereits erwähnt immer nur eine Datei ausgegeben werden, da nie mehr in dem Ordner enthalten sein sollten. Der Dateiname wird dann in dem String "pathnames" gespeichert.

[CODE lang="java" title="Input"]FileInputStream fis = new FileInputStream(filePath);[/CODE]

Nun ist es ja so, dass ich die Textdatei bzw. seinen Inhalt (das Konfigurationstemplate) einlesen muss, um es an den Switch zu senden.

Wie genau kann ich den String (und seinen Inhalt) nun aus "private void list" an FileInputStream fis = new FileInputStream(filePath); übergeben?

Müsste dann ja eig wie folgt aussehen: FileInputStream fis = new FileInputStream(pathnames); 🙂

[CODE lang="java" title="Gesamter Block"]public void importTemplate() throws Exception
{
System.out.println("Aufspielen des Konfigurationstemplates beginnt in Kuerze!");

// else if(inStream.equals(inputText3)) //Input: "Would you like to enter the initial configuration dialog? [yes/no]:"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks
outStream.write(outputText5.getBytes()); //Befehl "no"
outStream.write(outputText8.getBytes()); //Befehl "enable"
outStream.write(outputText9.getBytes()); //Befehl "copy xmodem: running-config"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks

//list(null);

//xmodem einbinden, um das Konfigurationstemplate dem Switch zu senden
FileInputStream fis = new FileInputStream(filePath);
// serialPort Is a serial port object
Xmodem xmodem = new Xmodem(inStream,outStream);
//Dateipfad des Konfigurationstemplate
xmodem.send(fis);
serialPort.closePort();
}[/CODE]
 
1. Falls nur eine Datei im Verzeichnis vorhanden ist, dann ist diese auch die einzulesende. Verwende also die Datei mit Index 0, sofern es so viele gibt.
Falls mehrere vorhanden sind, dann musst du einen Weg finden, die richtige zu ermitteln.

2. Schon mal an
new File(fileName)
gedacht? Das daraus resultierende File-Objekt gibst du an deinen Inputstream weiter.
Es gibt auch eine listFIles() Methode, die gleich FIle-Objekte liefert anstatt die Namen in Stringform.
Java:
        File directory = new File("...");
        if (!directory.isDirectory()) {
            //es wurde eine Datei übergeben
            return;
        }
//Bei Listfiles kannst du noch Filter übergeben, z.B. Unterverzeichnisse ausschließen.
        File[] filesInDirectory = directory.listFiles();
        if (filesInDirectory.length == 0) {
            //keine Dateien vorhanden
            return;
        }
        //Datei mit Index 0 an den Stream übergeben.
        try (FileInputStram fs = new FileInputStream(filesInDirectory[0])) {
            //...
        }
 
ps: Das oben ist nur ein generelles Beispiel, passt vielleicht nicht perfekt zu deinem Problem.

Bevor du dich mit seriellen Schnittstellen beschäftigst, solltest du vielleicht noch grundsätzlich damit beschäftigen, wie Files und Arrays funktionieren. Denn die Frage, wie man von einem Array von Filenamen zu einem Fileinputstream kommt, zeugt jetzt doch davon, dass es hier kein besonders fundiertes Wissen gibt.
 

Zurück
Oben