Bonjour,
Je débute en Java (~3 mois) et dans le cadre d'un projet, je dois aller lire le contenu de disques et bandes SCSI, et effectuer diverses opérations avec ce contenu, comme la copie sur un autre support (fichier, disque, bande) ou simplement afficher le contenu, effectuer un checksum sur le contenu, ...
Mon problème est qu'apparemment mon programme détecte bien les disques et bandes en place, car quand je l’exécute les leds "travail" s'allument, mais que ce soit pour le lecture d'un disque ou l'écriture d'un fichier sur un disque par exemple c'est comme si aucune données n'étaient lu ou écrite. Mon programme marche parfaitement cependant quand je ne traite que des fichiers comme support.
Voici mon code pour l'opération copie par exemple :
pour un disque : support_source = /dev/sda (par ex)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 try { //On instancie nos objets bis_s = new BufferedInputStream(new FileInputStream(support_source)); raf_c = new RandomAccessFile(support_cible,"rw"); //bos = new BufferedOutputStream(new FileOutputStream(support2)); //On créer un tableau de byte //pour dire de combien en combien on va lire les données byte[] buf = new byte[512]; //On récupère le temps du systeme long startTime = System.currentTimeMillis(); if(mode_source == 1){ if(mode_cible == 1){ //On réinitialise startTime = System.currentTimeMillis(); raf_c.seek(sect_debut_cible * 512); while(bis_s.available() > 0){ if(bis_s.available() < 512){ buf = new byte[bis_s.available()]; } bis_s.read(buf); System.out.print(raf_c.getFilePointer()+"\n"); raf_c.write(buf); } } //On ferme le flux de données bis_s.close(); raf_c.close(); }else if(mode_source == 2){ raf_s = new RandomAccessFile(support_source,"rw"); int taille_adr = sect_debut_source*512; raf_s.seek(taille_adr); raf_c.seek(sect_debut_cible * 512); for(int j=sect_debut_source;j<=sect_fin_source;j++){ //System.out.print(raf_s.getFilePointer()+" "+raf_c.getFilePointer()+"\n"); raf_s.read(buf); raf_c.write(buf); } //On ferme le flux de données raf_s.close(); raf_c.close(); } //On réaffiche System.out.println("Temps de lecture + écriture avec BufferedInputStream et BufferedOutputStream : " + (System.currentTimeMillis() - startTime)); System.out.println("Copie terminée !"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
pour une bande : support_source = /dev/nst0 (par ex)
J'avais lu je ne sais plus où que ce n'était pas possible de lire et écrire sur des disques SCSI en java, est-ce vrai ?
Je suis également tenté de passer par une JNA en utilisant la fonction open() et en récupérant le int descripteur de fichier de retour , mais impossible de convertir ce int en FileDescriptor en java, donc j'ai abandonné l'idée.
Si vous pouviez m'aider, je vous en serai gré, cela fait 1 semaine voir un peu plus que je bloque sur ce problème
N'hésitez pas s'il vous faut plus d'informations.
Partager