Eine Geschichte über das Ausführen eines Programms, das Dateien in Java aus einer Bat-Datei kopiert, um die tägliche Arbeit ein wenig effizienter zu gestalten

Vorwort

Ich werde jeden Tag ein internes Tagebuch einreichen. Um ehrlich zu sein, ist es schwierig, die Datei jeden Tag zu kopieren und das heutige Datum einzugeben. Ich kann nicht gut klicken.

Deshalb habe ich es so weit wie möglich automatisiert.

Insbesondere wird eine Kopie mit dem Datum im Dateinamen mit einem einzigen Doppelklick erstellt. Ich habe den Inhalt der XLS-Datei nicht manipuliert. Es scheint eine Bibliothek zu geben, die das kann, aber diesmal ist es aus.

Ich habe Java und Batch-Dateien verwendet.

Ich konnte alles tun, was ich tun und lernen wollte.

Unten erklärt.

Java

Vorerst aus dem Programm selbst.

Programm

copyReport.java


package copyReport;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

 public class CopyReport {
	public static void main(String[] args) {
		//Bitten Sie sie, einen Ordner auf ihrem Desktop abzulegen
		String desktopPath = "C:\\Users\\"+System.getProperty("user.name")+"\\Desktop";
		String folderPath = desktopPath+"\\copyreport";

		//Holen Sie sich die Dateinamen im Programmordner als Array
		File[] files = new File(folderPath).listFiles();

		//Rufen Sie den Namen der Quelldatei ab. Ich habe es möglich gemacht, es in meinen eigenen Namen zu ändern.
		String baseFileName = "";
		for(File f:files) {
			if(f.getName().matches(".*Tagesbericht_.*\\.(xls|xlsx|ods)")) {
				baseFileName = f.getName();
			}
		}

		//Suchen Sie nach einer Quelldatei
		if(baseFileName.isEmpty()) {
			System.out.println("Die Quelldatei wurde nicht unter copyreport gefunden.");
			return;
		}
		File baseFile = new File(folderPath,baseFileName);
		if(!baseFile.exists()) {
			System.out.println("Die Quelldatei wurde nicht gefunden.");
			return;
		}

		//Generieren Sie den heutigen Dateinamen ab Datum
		String today = LocalDate.now().format(DateTimeFormatter.ofPattern("YYYYMMdd"));
		String outFileName = today + baseFileName.substring(baseFileName.lastIndexOf("Tagesbericht_"));
		System.out.println(outFileName + "Kopieren als.");

		//Überprüfen Sie, ob es bereits vorhanden ist
		File outFile = new File(desktopPath,outFileName);
		if(outFile.exists()) {
			System.out.println("Die Zieldatei ist bereits vorhanden.");
			return;
		}

		//Nachricht ausgeben
		System.out.println("Kopieren Sie die Datei.");
		System.out.println("Kopieren Sie den Namen des Quellordners;"+folderPath);
		System.out.println("Namen der Quelldatei kopieren:"+baseFile.getName());
		System.out.println();
		System.out.println("Namen des Zielordners kopieren;"+desktopPath);
		System.out.println("Name der Zieldatei kopieren:"+outFile.getName());

		try {
			//Erstellen Sie einen Stream aus der Instanz der Kopierquell- / Zieldatei
			FileInputStream fis = new FileInputStream(baseFile);
			FileOutputStream fos = new FileOutputStream(outFile);

			//Verwalten Sie Puffer und lesen Sie Bytes
			byte[] buf = new byte[256];
			int len=0;
			//Lesen und schreiben Sie jeden Stream bis zum Ende der Datei
			while((len = fis.read(buf)) != -1) {
				fos.write(buf,0,len);
			}

			//Schreiben Sie den fehlenden Teil aus
			fos.flush();

			//Beenden Sie den Zugriff auf die Datei
			fos.close();
			fis.close();

			//Botschaft
			System.out.println("Die Datei wurde erfolgreich kopiert.");

		} catch (FileNotFoundException e) {
			System.out.println("Fehler beim Kopieren der Datei.");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Fehler beim Kopieren der Datei.");
			e.printStackTrace();
		}

	}

}

Programm Beschreibung

Da es sich nicht um ein weit verbreitetes Tool handelt, soll es "einen Ordner direkt auf dem Desktop ablegen und ausführen".

Desktop-Speicherort

Der Speicherort des von Ihnen verwendeten Windows 10-Desktops ist C: \ user \ (USER-Name) \ Desktop. Dieser Speicherort variiert von Person zu Person. Rufen Sie ihn daher unter System.getproperty (Benutzername) ab und geben Sie ihn ein.

Dateiarray

Da es sich um einen Ordner zum Speichern von Programmen, Kopieren von Quelldateien und Ausführen von Bat-Dateien handelt, besteht eine zweistufige Struktur zum Abrufen des gesamten Namens → Abrufen des Namens der Kopierquelldatei.

Übereinstimmungsbedingung

(Beliebiges Datum) Täglicher Bericht_ (Beliebiger Name). (Xls oder xlsx oder ods) Regulären Ausdruck. Rufen Sie die entsprechende Datei als Namen der Kopierquelldatei ab. Wenn Ihr Name im ursprünglichen Dateinamen enthalten ist, wird er auf diese Weise so kopiert, wie er ist.

Überprüfen Sie die Kopierquelle

Ich denke nicht, dass es übertrieben ist, aber es ist schwieriger, wenn es eine Lücke gibt.

Dateinamen ab Datum generieren

Holen Sie sich das heutige Datum als 8-stellige Zahlenfolge. Erstellen Sie einen Namen für die Kopierzieldatei, indem Sie ihn in die erste Hälfte des Namens der Kopierquelldatei einfügen.

Zielprüfung kopieren

Es wäre ein Problem, wenn der tägliche Bericht, in dem ich den Inhalt geschrieben habe, überschrieben würde (ich glaube, ich habe ihn überhaupt nicht überschrieben). Überprüfen Sie ihn daher vorerst.

Kopie der Datei

Dieses Mal habe ich mich für FileInputStream und FileOutoutStream entschieden. Es scheint, dass der Buf, bei dem es sich um den Inhalt handelt, der aus FileInputStream in len Bytes gleichzeitig gelesen wird, an FileOutputStream gesendet wird. Als ich es nachgeschlagen habe, war es in jedem Material gleich geschrieben, aber aus diesem Grund gab es nur wenige Beispiele und es war schwierig, den Mechanismus zu verstehen.

Endlich Verarbeitung

Ich habe das Teil, das nicht gespült werden konnte, manuell gespült oder den Zugriff beendet. Es scheint, dass die Verarbeitung der Zugriffsbeendigung für Java 8 oder höher erfolgt.

Das war's für die Java-Programmierung. Danach können Sie aus Eclipse exportieren oder auf das JAR doppelklicken, um es auszuführen.

In Eclipse exportieren

Tun Sie es so, wie es mit Datei-> Export-> Ausführbare JAR-Datei fließt. Wie stark sollten der Name der JAR-Datei, der Projektname, der Name der Hauptklasse usw. ausgerichtet sein? Vollständig, wenn eine JAR-Datei auf dem Desktop generiert wird.

Erstellen einer Java-Ausführungsumgebung

Der mit dem Namen JRE. War es eine Java-Laufzeitumgebung? Erforderlich, um Java (Java-Befehl, Javac-Befehl) an der Eingabeaufforderung auszuführen.

Wenn Sie Eclipse haben, können Sie schnell den Pfad von Bildschirm → Einstellungen → Java → Ausführungsumgebung übernehmen und in die Umgebungsvariable des PCs einfügen. Es scheint, dass Sie java.exe oder javac.exe direkt angeben können, diesmal jedoch den Ordner direkt darunter. Sobald ich es hineingesteckt hatte, ließ ich es hinein, also vergaß ich völlig, es einzulegen und war ungeduldig.

Bestätigung der Ausführung

Verschieben Sie an der Eingabeaufforderung "java -jar copyReport.jar" aus dem Ordner, der die JAR-Datei enthält, und überprüfen Sie den Vorgang. Der Dateiname ist derjenige, der aus Eclipse exportiert wird.

Erstellen Sie eine Fledermausdatei

Erstellen Sie eine .bat-Datei mit einem geeigneten Namen und bearbeiten Sie sie mit Notepad. Inhalt wie dieser

copy.bat


@echo off
cd ./copyreport
java -jar copyReport.jar
timeout 5 

Erläuterung

Die erste Zeile

Nachfolgende Inhalte der Befehlseingabe müssen nicht angezeigt werden (Echo aus). Sie müssen den Befehl (@) nicht anzeigen.

2. Zeile

Ein Befehl zum Verschieben des aktuellen Speicherorts der Konsole in den Ordner "copyreport" direkt unter dem gestarteten Ordner. Selbst wenn Sie einen Fehler machen, wird er nicht fallen, sodass Sie ihn mit Sicherheit ausführen können. Es gibt einen Fehler, dass die Zukunft nicht funktioniert, wenn der Ordner mit dem Namen copyreport im Ordner copyreport fehlschlägt.

3. Zeile

Führen Sie die angegebene Java-Datei als JAR mit Java aus

4. Zeile

Schließen Sie diesen Bildschirm nach 5 Sekunden. Wenn Sie eine Nachricht erhalten, diese aber löschen möchten, fügen Sie am Ende "> nul" hinzu. Die Bedeutung davon ist "Bitte geben Sie die Nachricht an nul aus".

Was ich gelernt habe

Ich habe es geschrieben, nachdem ich den Dateivorgang überprüft hatte, aber es dauerte fast einen ganzen Tag. Das Lesen von FileInputStream # ist kompliziert und es scheint, dass der Inhalt von buf und len je nach Überladungsmethode verwirrt ist. Ehrlich gesagt war ich sehr beunruhigt. Der PC in der Ausführungsumgebung wird dadurch nicht verändert, daher kann man ihn leicht vergessen, daher möchte ich vorsichtig sein.

Recommended Posts

Eine Geschichte über das Ausführen eines Programms, das Dateien in Java aus einer Bat-Datei kopiert, um die tägliche Arbeit ein wenig effizienter zu gestalten
[Kleine Geschichte] Ich habe versucht, die Java-ArrayList etwas komfortabler zu gestalten
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Versuchs, JAVA File zu bedienen
Eine Bat-Datei, die Java in Windows verwendet
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
Die Geschichte, dass Tomcat in Eclipse unter einem Timeout-Fehler litt
Eine Geschichte über den Wechsel von Fähigkeiten von COBOL, das Ende der 20er Jahre 5 Jahre lang gepflegt wurde, zu einer Web-Sprache
Eine Geschichte über ein in Java geschriebenes Spring Boot-Projekt, das Kotlin unterstützt
Eine Geschichte über das Konvertieren von Zeichencodes von UTF-8 in Shift-jis in Ruby
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
Was tun gegen "Ein Server läuft bereits ...", ohne dass der Rails-Server im Terminal ausgeschaltet wurde