2 tittes questions

Résolu
Utilisateur anonyme - 9 févr. 2005 à 12:45
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 10 févr. 2005 à 18:32
Voila je suis en traion de creer un programme mais je rencontre 2 petits problèmes :

le premier c'est quel buffer utiliser pour lire un fichier ligne par ligne

je demande une ligne précise du fichier et il me la prend et voila

2 eme probleme : j'aimerais que mon logiciel cherche et analyse tout les fichiers de l'ordi
je ne vois pas comment faire une fonction qui verifirait chaque fichier dans chaque dossier du systeme

en fait c'est pour faire une sorte d'anti spyware, il analyse tt les fichiers et regarde une certaine ligne du fichier convertis en texte par exemple et il verifi a chaque fois si c'est un spyware

merci d'avance

++

16 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
10 févr. 2005 à 12:53
Salut

D'habitude je ne fais pas de code car le but de la programmation c'est d'apprendre et de se débrouilelr tout seul. M'enfin puisque je vais en avoir besoin pour mon taf je l'ai fais vite fait en 5 min :

import java.io.*;


public class ListRoots{


private String pattern = "";


public void printRoots(){
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; ++i)
printRoot(roots[i]);
}


protected void printRoot(File root){
System.out.println("Entering root " + root.getAbsolutePath());
File[] rootFiles = root.listFiles();


if (rootFiles == null){
System.out.println("Partition sans données");
return;
}


for (int i = 0; i < rootFiles.length; ++i)
printDirectory(rootFiles[i]);
}


protected void printDirectory(File dir){
System.out.println(getPattern() + dir.getName() + " (DIR)");
File[] dirFiles = dir.listFiles();


// Si aucun fichier !
if (dirFiles == null){
System.out.println("Aucunes donnees dans ce repertoire !");
return;
}


pattern = pattern + " |";
for (int i = 0; i < dirFiles.length; ++i)
if (dirFiles[i].isDirectory())
printDirectory(dirFiles[i]);
else
System.out.println(getPattern() + dirFiles[i].getName());
pattern = pattern.substring(0, pattern.length() - 2);
}


private String getPattern(){
return pattern + "-";
}


public static void main(String[] args){
ListRoots lr = new ListRoots();
lr.printRoots();
}
}

Maintenant il va falloir te mettre à l'anglais, tu vois ça sert !!!! EN fait si tu veux faire acrrière dans l'informatique, je te conseille de t'y mettre rapidement c'est aussi important que les maths et l'informatique même ... si si je te jure !!! Regarde les DVDs en Vo maintenant !!! ;-)

@+
3
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
9 févr. 2005 à 14:24
Salut

Utilise la classe BufferedReader pou rlire un fichier ligne par ligne. Pour parcourir tous les répertoires d'une partition il te suffit de jouer avec la classe File et de faire un peu de récursivité.

En revanche je pense que ta méthode pour créer un antispyware n'est ppas la bonne notamment à cause de ta conversion en texte !!! Car tu peux très bien recontré un caractère de fin de chaine et le buffered te dira qu'il n'y a plus rien à lire. Il te faut une comparaison de binaire à binaire !!! ;-)

@+
0
Utilisateur anonyme
9 févr. 2005 à 14:26
d'accord merci pour le 1er prob j'ai pigé,


mais pr le deuxieme je comprend pas ta recursivité

as tu un example stp ?





++
0
Utilisateur anonyme
9 févr. 2005 à 14:55
j'ai 14 ans donc je ne comprend pas bien ton histoire de recursivité

si tu pouvais me faire une fonction pour me montrer comment acceder a tout
les fichiers dans tout les dossiers ce serait sympa

merci d'avance

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RastaNova Messages postés 7 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 10 février 2005
9 févr. 2005 à 17:42
En fait le principe d'une fonction recursive est qu'elle peut s'appeler elle-meme a l'interieur d'elle meme. En general en prog on distingue d'un coté les methodes recursives et de l'autre les methodes iteratives (ce que tu peux faire avec un for par exemple) (t'as le droit de t'amuser a combiner les 2...:D).
Je ne connais pas les fonctions de File, mais je suppose qu'ici la recursivité dont veux parler neodante servirait par exemple a lister les repertoires dans un repertoire, puis les repertoires dans ce repertoire, ainsi de suite.
Apres, a toi de traiter les fichiers comme tu le souhaites...
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
9 févr. 2005 à 19:14
Salut

C'est exactement ça !!!

Ex:

public void printDirectory(File root){
File[] files = root.getFiles();
File file = null;
for (int i = 0; i < files.size; ++i){
file = files[i];
if (file.isDirectory())
System.out.println(file.getName + " contain :");
printDirectory();
} else
System.out.println("-> " + file.getName());
}

Cette méthode devrait parcourir tous les répertoire d'un racine (filesystem) et écrire sur une console le nom de tous les fichiers.

Voici la javadoc de File :
http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html

Ca devrait aller maintenant non ??? Si tu n'y arrive pas n'hésites pas !!!

@+
0
Utilisateur anonyme
10 févr. 2005 à 08:54
merci lol
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
10 févr. 2005 à 09:12
Salut

Erreur dans le code :

if (file.isDirectory())
System.out.println(file.getName + " contain :");
printDirectory(file);
}

Sinon c'est pas vraiment récursif !!! ;-)

@+
0
Utilisateur anonyme
10 févr. 2005 à 09:28
lol merci c'est nickel mais j'ai 3 questions a propos :

- est ce ke kan on appelle cette fonction (methode en java) il faut remplacer root par le repertoire ke l'on veut, ex :
public void printDirectory("C:\");

- est ce ke le nom des fichiers est écrit avec extension (si non comment faire pour avoir l'extension, si il n'y a l'extension comment l'enlever, remplacer getName() par quoi
est ce ke le path du fichier, le chemin complet du fichier est marqué avec, (si non comment faire pour avoir juste le nom du fichier, et si il y a juste le nom du fichier comment faire pour avoir le path avec.
je sais c'est beaucoup mais j'ai envie d'apprendre lol

- est ce ke les fichiers cachés sont indiqués, la plupart des spywares sont dans local
settings, dossier caché mais on peut le rendre visible avec windows, java prend il en
compte ces dossier et fichiers, (si non comment faire lol)

merci d'avance je sais ke je suis un peu saoulant mais j'ai soif d'apprendre lol

++ et bonne prog
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
10 févr. 2005 à 09:49
Salut

En regardant la Javadoc tu aurais dû trouver la méthode :
static File[]

,
listRoots()

List the available filesystem roots.

Qui te renvoit la liste de tes racines de toutes les partitions montés sur le système (c:, d:, e:, ... pour windows).

Par conséquent tu fais une boucle en donnant chaque racine qui est un fichier File à la fonction printDirectory, tu parcouras TOUS tes répertoires !

Normalement le nom du fichier comprends l'extension (tout simplement parce que l'extension fait partie du nom d'un fichier. Une extenion sert simplement à savoir quel programme lancé lorsqu'on clic dessus ...) et tes fichiers cachés devraient également s'affiché et tu pourras savoir s'ils sont cachés à l'aide la méthode :


boolean
,
isHidden()

Tests whether the file named by this abstract pathname is a hidden file.

Voilà je pense que cela répond à tes questions. Comme tu peux le voir je n'ai été cherché les informations que dans la javadoc. Télécharge là et installe là sur ton PC, un développeur Java ne peut pas se passer de la javadoc !!! ;-)

@+
0
Utilisateur anonyme
10 févr. 2005 à 09:55
c'est en anglais lol, a 14 ans je suis pas un boss en anglais

encore une chose stp

ton code n'etais pas juste a 100% si je puis me permettre

regarde :

import java.io.*;
import java.io.File;



public class Essai{


public static void main(String[] args)
{


Jo jo = new Jo();





File c = new File("C:");



jo.printDirectory(c);


}



}
class Jo{


public void printDirectory(File root){
File[] files = root.listFiles();
File file = null;
for (int i = 0; i < file.length(); ++i){
file = files[i];
if (file.isDirectory()){
System.out.println(file.getName() + " contain :");
printDirectory(file);}
else{
System.out.println("-> " + file.getName());
}
}
}
}

le file.size dans la boucle for je l'ai remplacé par file.length(); et d'autre petit truc

kan je compile c'est bon mais kan je lance avec le dos j'ai ca : exception in thread main
java.lang.nullPointerexception
at jo.printDirectory
at essai.main

++ et bonne prog
0
Utilisateur anonyme
10 févr. 2005 à 09:57
PS : comme c'etait juste pour le repertoire c: j'ai pas fait listRoots mais k'est ce ki ne va pas ds le prog ?
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
10 févr. 2005 à 10:09
Salut

Effectivement mon code n'étais surement pas tout bon puisque je l'ai fait dans la fenêtre de réponse au fourm (OK j'abuse d'avoir confondu le size des List et le length des tableau !!! ;-( ).

Je pense que ton erreur vient de là :
File c = new File("C:");
Le mieux est que tu tests toi même cette valeur. A chaque fois que tu as un NullPointerException c'est qu'un objet n'a pas été créé et donc à toi de savoir lequel en testant pour trouver la source du bug.

Ici fais un simple :
if (c == null)
System.out.println("File = NULL !!!!");

Ca te permettra de savoir si c'est cette objet. Pour résoudre ce problème, utilise le listRoots !!! Parce 'c:\' n'est pas vraiment un répertoire ni un fichier non ??? C'est pour ça que ça plante.

@+
0
Utilisateur anonyme
10 févr. 2005 à 10:34
ecoute je vais etre franc avec toi y a plein de truc ke je capte pas comme dans la boucle for pk file.length et pas files.length, on parle de la longueur du tableau, un objet file n'a pas
de longueur

en fait je te supplie de m'envoyer le code avec tt ki marche et le list.roots pour ke je comprenne kelke chose

un truc ou je fais juste copier coller je compile et ca marche j'ai tt les fichier meme caché ki s'affiche

parce ke si ca marche pas je pourrai pas bien comprendre

apres j'aurai le temps d'etudier et d'adapter pr en faire un anti spyware


j'espere ke tu m'aiderais parce ke la j'en aurai vraiment besoin


PS : indique moi juste comment faire pr ecrire le nom du fichier avec le path du fichier ou plutot d'abord le path et apres le nom, si getname le fait deja indique moi pr enlever le path





j'espere ke t'aura compris kelke chose a ma kestion sinon c pas grave envoi moi juste le code avec listroots en partant de ce ke j'ai fait la haut, je sais ke t'as peut etre pas le temps de le faire correctement mais kan y a plein de truc ki marche pas bien j'arrive pas a les
regler donc teste le code avant lol stp

merci d'avance

++ et bonne prog
0
Utilisateur anonyme
10 févr. 2005 à 15:02
ok mer'ci c super sympa
je vais me mettre a l'anglais mais ds mon jdsdk j'ai pas l'api j'ai le 1.4.2
mais ca va je vais me debrouiller pr comprendre ton code

merci ct super cool de ta part


++ et bonne prog
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
10 févr. 2005 à 18:32
Salut

de rien !!! On est là pour ça !!!

@+
0
Rejoignez-nous