changer l'extension d'un fichier

othmani
changer l'extension d'un fichier

salut tout le monde,
j'ai un fichier.evt à manipuler avec java. je l'ai enregistré .txt à la main et j'ai fais mon travail et tout marche bien.
le probleme c'est comment avec java je lui donne par exemple le chemin de ce fichier.evt, il l'enregistre dans un emplacement precis avec l'extension.txt afin de faire le meme travail.
merci d'avance

Niroken
Une aide:)

Ce morceau de code fait cela très bien :

import java.io.*;

public class Fichier
{
	public static void main(String[] args)
	{
		try
		{
			File source = new File("toto.evt");
			File destination = new File("toto.txt");
			source.renameTo(destination);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

Il y a un tutoriel plus complet qui répond à beaucoup de questions
en java (par exemple) :
http://java.developpez.com/faq/java/?page=langage_fichiers

Bonne chance

othmani

import java.io.*; 

public class rennomer
{ 
   public static void main(String[] args) 
   { 
      try 
      { 
    	 String emplacementSrc = "C:/WINDOWS/system32/config/SysEvent.Evt";
    	 String emplacementDest = "C:/Systeme_event.txt";
    	 File source = new File(emplacementSrc); 
         File destination = new File(emplacementDest); 
         source.renameTo(destination); 
      } 
      catch (Exception e) 
      { 
         e.printStackTrace(); 
      } 
   } 
} 

j'ai executé ce code mais pas de création du fichier.txt
je veux que le fichier.evt reste comme il est (intatch), et qu'il y aura création d'un autre fichier.txt que j'ai donné son nouveau emplacement.
Niroken
Une aide:)

Le problème vient de la syntaxe de ton code pour
donner un chemin de fichier correct.

Voici ce qui convient de faire :

import java.io.*;

public class Fichier
{
	public static void main(String[] args)
	{
		try
		{
			File source = new File("C:\\Program Files\\MumuseMat\\Fichier.java");
			File destination = new File("C:\\Fichier.txt");
			source.renameTo(destination);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

Bonne chance

othmani

non le chemin ne vient pas du syntaxe du mon chemin puisque j'ai travaillé avec ce syntaxe et ca marché tres bien, mais quand meme j'ai changé et rien ne marche puisque

Quote:

source.renameTo(destination);

c'est une boolean et elle me retourne False
j'ai essayé aussi de copier le fichier.Evt à l'endroit où je veux avoir le fichier.txt puis je l'ai renommé: la copie se termine avec succé et le renommage aussi mais en ouvrant le nouveau fichier.txt son contenu est incomréhensible.
please aidez moi.
j'ai fais mon travail sur un fichier.txt que je l'ai obtenu en cliquant avec le bouton gauche de la souris sur "poste de travail" puis "gérer" ensuite "Observateur d'evenement"
puis en cliquant avec le bouton gauche de la souris sur "system" j'ai "enregistrer le fichier journal sous" en choisissant l'emplacement et l'extansion.txt et tout est bien passé;
et maintenant que faire pour l'obtenir avec un petit code
help
fredericmazue

Quote:
Le problème vient de la syntaxe de ton code pour
donner un chemin de fichier correct.

Faut bien lire les demandes d'Othamni. Je dirais même avec un certain recul.
En titre il (ou elle) dit "changer l'extension". Et c'est bien ce que fait ton code. Mais Othmani faut surtout pas lui répondre avant qu'il (ou elle) ait écrit 3 ou 4 posts supplémentaires. La preuve:
Quote:
je veux que le fichier.evt reste comme il est (intatch), et qu'il y aura création d'un autre fichier.txt que j'ai donné son nouveau emplacement.

C'est une copie de fichier qu'il (elle) veut.

En outre... pardonnez moi, je sais que je ne devrais pas, mais je ne peux pas m'en empêcher...

import java.io.*;

public class Fichier
{
   public static void main(String[] args)
   {
      try
      {
         File source = new File("toto.evt");
         File destination = new File("toto.txt");
         source.renameTo(destination);
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }
} 

18 lignes de code pour renommer un fichier.... :evil:
C'est quand même pas pensable, un bouzin de langage pareil.
Pour renommer un fichier, il faut une ligne de code avec un langage digne de ce nom:
(rename-file "fichier.evt" "fichier.txt")
:twisted: :twisted: :twisted:
Niroken
Une aide:)

Bon j'ai bien regardé cette histoire de fichier.evt
le soucis c'est que de base ce n'est pas un fichier texte.

->Donc le renommer ou le copier tel quel n'y changera
rien.

Dans l'idéal il faudrait utiliser les commandes de l'observateur
d'événements pour sauver ton fichier .evt en un fichier.txt
Bon ca demandera beaucoup de temp à mon avis parceque
ce n'est pas une action courante donc peu documentée sur le
web, pour ce que j'en ai regardé.

Bien si vraiment on ne te donne que des fichiers .evt et que
"ta source" s'obstine a ne pas vouloir les enregistrer en .txt
A partir de ton observateur d'évenemnets tu fais "Action" puis
"Ouvrir un journal" et tu séléctionnes le fichier .evt que tu as
sélectionné pour le retransformer ensuite en .txt

Bon maintenant si c'est toi "la source"..... :D

fredericmazue

Quote:
Dans l'idéal il faudrait utiliser les commandes de l'observateur
d'événements pour sauver ton fichier .evt en un fichier.txt

Pas obligatoirement. Il n'est pas imposible qu'il existe une interface Automation pour faire ça. Dans ce cas ça peut se faire en Java, moyennant l'utilisation d'une librairie Java/Automation qui existe, mais je ne sais plus où pour l'instant.

Cela dit, si othmani voulait bien se donner la peine de poser des questions précises, ça serait bien pour tout le monde.
Parce que quand on voit la question de départ, et où en est la discussion maintenant ça laisse quand même songeur.

othmani

je m'excuse puisque j'ai pas pu exprimer mes besoins dès le début.
mais est ce que maintenant vous saisissez ce que je veux:
j'ai des traitements à faire sur un fichier.Evt et puisque sont contenu est incompréhensible je l'ai enregistrer sous .txt mais tout ce travail est manuel;
je veux qu'au debut de mon code qu'il y aura cette transformation afin de terminer l'excution de mes methodes déjà ecritent
je m'excuse une autre fois

Niroken
Une aide:)

Bon je crois avoir compris ce que tu voulais
donc j'ai cherché du cotéde la commande qui te
permet de réaliser cela.

Elle n'est pas parfaite en tout point puisque le format
du fichier texte généré n'est pas tt a fait le même

Primo sur ton cmd tu éxécutes :
cscript //h:cscript //s
cette permettra d'éxécuter le script ui se chargera
de l'affaire.

Je te fournis le code java qui va avec, bon j'avoue j'ai fait
un peu mumuse:)

import java.io.*;
import java.util.regex.*;

public class GestEvt
{
	public static void main(String[] args)
	{
		try
		{
			BufferedReader bufferedReaderForInput = null;
			String InputChoice;			
			
			System.out.println("Veuillez choisir le type de fichier à sélectionner :");
			System.out.println("1 : System");
			System.out.println("2 : Application");
			System.out.println("3 : Security");
			bufferedReaderForInput = new BufferedReader(new InputStreamReader(System.in));
						
			while(!(InputChoice = bufferedReaderForInput.readLine()).matches("([1]|[2]|[3])"))
			{
				System.out.println("Veuillez choisir le type de fichier à sélectionner :");
				System.out.println("1 : System");
				System.out.println("2 : Application");
				System.out.println("3 : Security");
				bufferedReaderForInput = new BufferedReader(new InputStreamReader(System.in));
			}
			
			String cmdLine = "";
			
			if (InputChoice.equals("1"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l system";
			if (InputChoice.equals("2"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l application";
			if (InputChoice.equals("3"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l security";
			
			Runtime runtime = Runtime.getRuntime();
			Process proc = runtime.exec(cmdLine);
			
			InputStream inputstream = proc.getInputStream();
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            BufferedReader bufferedReaderForOutput = new BufferedReader(inputstreamreader);
			
            PrintWriter output =  new PrintWriter(new BufferedWriter(new FileWriter("titi.txt")));
					
			String outputLineEvt;
            while ((outputLineEvt = bufferedReaderForOutput.readLine()) != null)
			{
				//System.out.println(outputLineEvt);
				output.println(outputLineEvt);
			}
			
			output.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

Bonne chance

Niroken

Ah vi petite précision,
Mci a fred pour m'avoir éclairé au niveau de
l'éxécution des commandes shell via une syntaxe
par java:)
J'avais pas fait très fort sur ce coup :D

fredericmazue

Quote:
Ah vi petite précision,
Mci a fred pour m'avoir éclairé au niveau de
l'éxécution des commandes shell via une syntaxe
par java:)
J'avais pas fait très fort sur ce coup

Bah te bile pas va :)
Je pense que tous ceux qui ont essayé Runtime.exec ont commencé par se faire piéger, moi inclus :)
Niroken

J'ai allégé ma précédente version, été oblige:)

import java.io.*;
import java.util.regex.*;

public class GestEvt
{
	public static void main(String[] args)
	{
		try
		{
			BufferedReader bufferedReaderForInput = null;
			String InputChoice;			
			
			System.out.println("Veuillez choisir le type de fichier à sélectionner :");
			System.out.println("1 : System");
			System.out.println("2 : Application");
			System.out.println("3 : Security");
			bufferedReaderForInput = new BufferedReader(new InputStreamReader(System.in));
						
			while(!(InputChoice = bufferedReaderForInput.readLine()).matches("([1]|[2]|[3])"))
			{
				System.out.println("Veuillez choisir le type de fichier à sélectionner :");
				System.out.println("1 : System");
				System.out.println("2 : Application");
				System.out.println("3 : Security");
				bufferedReaderForInput = new BufferedReader(new InputStreamReader(System.in));
			}
			
			String cmdLine = "";
			
			if (InputChoice.equals("1"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l system > SysEvt.txt";
			if (InputChoice.equals("2"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l application > AppEvt.txt";
			if (InputChoice.equals("3"))
				cmdLine = "cmd.exe /c eventquery.vbs /fo CSV /l security > SecEvt.txt";
			
			Runtime runtime = Runtime.getRuntime();
			Process proc = runtime.exec(cmdLine);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

Ne pas oublier le "cscript //h:cscript //s" en ligne de commande avant
de lancer le prog.

Bonne chance

fredericmazue

Quote:
J'ai allégé ma précédente version, été oblige:)

Bel effort à nouveau, mais été ou pas coup de chaleur ou pas, un jour ce programme plantera pour les raisons que j'ai évoquées dans l'autre fil de discussion.
Et évidemment ce sera le jour de la démonstration devant le patron, le prof, le client, enfin devant la personne qui faut pas. L'expérience montre que c'est toujours comme ça. :lol:

Comme la sortie des commandes lancées n'est pas lue par le code Java mais redirigées vers un fichier de l'OS, on peut à l'extrême limite se passer lancer de thread, comme dans le code que j'ai donné en exemple. Mais dans ton code, il faudrait au moins ajouter :

proc.waitFor();

Pourquoi ais je dit plus haut à l'extrême limite ? Pourquoi pas c'est Ok comme ça en redirigeant les sorties dans un fichier ? Parce que si par malchance une commande lancée émet une floppée de messages d'erreurs, elle va le faire sur stderr, et là cette sortie ne sera pas dirigée vers un fichier de l'OS et ça va coincer s'il y a saturation du buffer du système. Bien sûr cela se produira le jour où le Boss regardera ce beau code en action. Ca ce n'est pas un peut être :lol:

youber1204
java

je peux savoir comment extraire une image d'un document word en java et merci.