Je soumettrai un journal interne chaque jour. Pour être honnête, il est difficile de copier le fichier tous les jours et de mettre la date d'aujourd'hui. Je ne suis pas doué pour cliquer.
C'est pourquoi je l'ai automatisé autant que possible.
Plus précisément, une copie avec la date dans le nom du fichier sera générée avec un simple double clic. Je n'ai pas falsifié le contenu du fichier xls. Il semble y avoir une bibliothèque qui peut le faire, mais cette fois, elle est désactivée.
J'ai utilisé Java et des fichiers batch.
J'ai pu faire tout ce que je voulais faire et apprendre.
Expliqué ci-dessous.
Java
Pour le moment, du programme lui-même.
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) {
//Demandez-leur de mettre un dossier sur leur bureau
String desktopPath = "C:\\Users\\"+System.getProperty("user.name")+"\\Desktop";
String folderPath = desktopPath+"\\copyreport";
//Obtenez les noms de fichiers dans le dossier du programme sous forme de tableau
File[] files = new File(folderPath).listFiles();
//Obtenez le nom du fichier source de la copie. J'ai permis de le changer en mon propre nom.
String baseFileName = "";
for(File f:files) {
if(f.getName().matches(".*Rapport journalier_.*\\.(xls|xlsx|ods)")) {
baseFileName = f.getName();
}
}
//Vérifier la copie du fichier source
if(baseFileName.isEmpty()) {
System.out.println("Le fichier source de la copie est introuvable dans le rapport de copie.");
return;
}
File baseFile = new File(folderPath,baseFileName);
if(!baseFile.exists()) {
System.out.println("Le fichier source de la copie est introuvable.");
return;
}
//Générer le nom du fichier du jour à partir de la date
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("YYYYMMdd"));
String outFileName = today + baseFileName.substring(baseFileName.lastIndexOf("Rapport journalier_"));
System.out.println(outFileName + "Copier comme.");
//Vérifiez s'il existe déjà
File outFile = new File(desktopPath,outFileName);
if(outFile.exists()) {
System.out.println("Le fichier de destination existe déjà.");
return;
}
//Message de sortie
System.out.println("Copiez le fichier.");
System.out.println("Copier le nom du dossier source;"+folderPath);
System.out.println("Copier le nom du fichier source:"+baseFile.getName());
System.out.println();
System.out.println("Copier le nom du dossier de destination;"+desktopPath);
System.out.println("Copier le nom du fichier de destination:"+outFile.getName());
try {
//Créer un flux à partir de l'instance de fichier source / destination de la copie
FileInputStream fis = new FileInputStream(baseFile);
FileOutputStream fos = new FileOutputStream(outFile);
//Gérer les tampons et lire les octets
byte[] buf = new byte[256];
int len=0;
//Lire et écrire dans chaque flux jusqu'à la fin du fichier
while((len = fis.read(buf)) != -1) {
fos.write(buf,0,len);
}
//Écrivez la partie qui n'est pas écrite
fos.flush();
//Terminer l'accès au fichier
fos.close();
fis.close();
//message
System.out.println("Le fichier a été copié avec succès.");
} catch (FileNotFoundException e) {
System.out.println("Échec de la copie du fichier.");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Échec de la copie du fichier.");
e.printStackTrace();
}
}
}
Puisqu'il ne s'agit pas d'un outil destiné à être largement publié, il est conçu pour «placer un dossier directement sur le bureau et l'exécuter».
L'emplacement du bureau Windows 10 que vous utilisez est C: \ user \ (USER name) \ Desktop, qui varie d'une personne à l'autre, alors obtenez-le à partir de System.getproperty (nom d'utilisateur) et entrez-le.
Puisqu'il s'agit d'un dossier pour stocker les programmes, copier les fichiers source et les fichiers bat d'exécution, il a une structure en deux étapes pour obtenir le nom complet → obtenir le nom du fichier source de la copie.
(Tout élément de date) Rapport quotidien_ (Tout nom). (Xls ou xlsx ou ods) Expression régulière. Obtenez le fichier correspondant comme nom de fichier source de la copie. En faisant cela, si votre nom est inclus dans le nom de fichier d'origine, il sera copié tel quel.
Je ne pense pas que ce soit excessif, mais c'est plus gênant quand il y a un écart.
Obtenez la date du jour sous forme de chaîne numérique à 8 chiffres. Créez un nom de fichier de destination de copie en le plaçant dans la première moitié du nom de fichier source de la copie.
Ce serait un problème si le rapport quotidien que j'ai écrit sur le contenu était écrasé (je pense que je ne l'ai pas écrasé en premier lieu), alors vérifiez-le pour le moment.
Cette fois, j'ai décidé d'utiliser FileInputStream et FileOutoutStream. Il semble que le buf, qui est le contenu lu à partir de FileInputStream en len octets à la fois, est envoyé à FileOutputStream. Quand je l'ai recherché, il était écrit de la même manière dans tous les matériaux, mais à cause de cela, il y avait peu d'échantillons et il était difficile de comprendre le mécanisme.
J'ai rincé manuellement la partie qui ne pouvait pas être rincée ou mis fin à l'accès. Il semble que le traitement de la terminaison d'accès sera effectué pour Java 8 ou version ultérieure.
Voilà donc pour la programmation java. Après cela, vous pouvez exporter depuis Eclipse ou double-cliquer sur le fichier jar pour l'exécuter.
Faites-le comme il se passe avec Fichier-> Exporter-> Fichier jar exécutable. Dans quelle mesure le nom du fichier jar, le nom du projet, le nom de la classe principale, etc. doivent-ils être alignés? Terminé si un fichier jar est généré autour du bureau.
Celui appelé JRE. Était-ce un environnement d'exécution Java? Requis pour exécuter java (commande java, commande javac) à partir de l'invite de commande.
Si vous avez Eclipse, c'est rapide, prenez le chemin depuis Écran → Paramètres → Java → Environnement d'exécution et mettez-le dans la variable d'environnement du PC. Il semble que vous puissiez spécifier directement java.exe ou javac.exe, mais cette fois spécifiez le dossier directement sous eux. Une fois que je l'ai mis, je l'ai laissé, alors j'ai complètement oublié de le mettre et j'étais impatient.
À l'invite de commande, déplacez "java -jar copyReport.jar" du dossier contenant le fichier .jar et vérifiez l'opération. Le nom du fichier est celui de l'exportation depuis Eclipse.
Créez un fichier .bat avec un nom approprié et modifiez-le avec le Bloc-notes. Contenu comme celui-ci
copy.bat
@echo off
cd ./copyreport
java -jar copyReport.jar
timeout 5
Il n'est pas nécessaire d'afficher le contenu des entrées de commande suivantes (écho désactivé) Vous n'avez pas besoin d'afficher la commande (@)
Une commande pour déplacer l'emplacement actuel de la console vers le dossier copyreport directement sous le dossier lancé. Même si vous faites une erreur, elle ne tombera pas, vous pouvez donc l'exécuter en toute confiance. Si le dossier nommé copyreport dans le dossier copyreport échoue, l'avenir ne fonctionnera pas.
Exécutez le fichier java spécifié en tant que fichier jar avec java
Fermez cet écran après 5 secondes. Si vous recevez un message mais que vous souhaitez le supprimer, ajoutez "> nul" à la fin. La signification de ceci est "Veuillez envoyer le message à nul".
Je l'ai écrit après avoir examiné l'opération de fichier, mais cela a pris presque une journée entière. FileInputStream # read est compliqué, et il semble que le contenu de buf et len soit confus en fonction de la méthode de surcharge, donc honnêtement, j'ai été très troublé. Cela ne change pas le PC autour de l'environnement d'exécution, il est donc facile de l'oublier, alors soyez prudent.
Recommended Posts