Création
d'entreprise
Posez votre question Signaler

[Java - File] Lecture et écriture simultanée

kij_82 4070Messages postés 7 avril 2005Date d'inscription 24 septembre 2010Dernière intervention - Dernière réponse le 21 févr. 2009 à 22:49
Bonjour,
Pour certaines raisons dans l'un de mes programmes j'aurais besoin - si cela est possible - d'écrire et lire plus ou moins simultanément dans un fichier (des objets). Enfin, par simultanément je veux dire par là qu'il y aurait un flux de lecture et un flux d'écriture ouvert en même temps sur le fichier.
J'aurais aimé savoir avant de me lancer dedans, si :
1 - Est-ce possible d'avoir ces deux flux ouverts en même temp ?
2 - Comment adapter ces lectures / écritures sur des ObjectStream (ObjectOutputStream / ObjectInputStream) ?
Pour le point 2 quelques explications : Je voudrais écrire des objets dans un fichier (référencés par une clé (String)) en même temps pouvoir loader les objets enregistrés dans ce fichier en fonction de la clé de recherche.
J'ai regardé un peu la doc, je suis tombé sur les classes 'java.io.ObjectInputStream.GetField' et 'java.io.ObjectOutputStream.PutField'. Est ce que utilisées avec les méthodes 'readFields' et 'writeFields' des classes ObjectOutputStream et ObjectInputStream, je pourrais règler mon problème ?
Merci pour vos réponses.
Lire la suite 

[Java - File] Lecture et écriture simultanée »

1 réponses
Réponse
+1
moins plus
perso j'utilise java.io donc ...
voici mon bout de code ( un peu brutal certes mais pour des fichiers légers ou moyens ça passe bien )

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
/*
* FileCloner.java
*
* Created on 9 mars 2005, 18:17
*/

/**
*
* @author Malko
*/
public class FileCloner {
private int deeper;
private int deep;
private String strSrc;
private String strDest;

/** Creates a new instance of FileCloner de profondeur absolue */
public FileCloner() {
deeper = 0;
deep = 1;

}
public FileCloner(int dp){
deeper = dp;
deep = 1;

}
/**
*Fonction de copie du fichier
*@ src path du fichier source
*@ dest path du fichier dest
**/
public boolean clone(String src , String dest){
strSrc = src;
strDest = dest;
boolean back = false;
boolean back2 = false;

File[] listRepSrc;
File repDest = new File(strDest);

if(new File(strSrc).isDirectory()){
listRepSrc = new File(strSrc).listFiles();
if(!repDest.exists()){
back = repDest.mkdirs();
}
if(deep < deeper || deeper == 0){
int ct = 0;
while(ct <listRepSrc.length) {
File f_dest = new File( repDest.getAbsolutePath() + "\\" + listRepSrc[ct].getName() );
if(deeper !=0 ) {
new FileCloner(deeper-1).clone(listRepSrc[ct].getAbsolutePath() , f_dest.getAbsolutePath());
}else {
new FileCloner().clone(listRepSrc[ct].getAbsolutePath() , f_dest.getAbsolutePath()) ;
}
ct += 1;

}
}
}else if( new File(strSrc).isFile()){ // si le fichier n'est pas un repertoire
FileInputStream fis = null;
FileOutputStream fos= null;
try {
File Source= new File(strSrc);
File Destination;
if(new File(strDest).isDirectory()){
Destination = new File(strDest + "\\" + Source.getName());
}else {
Destination = new File(strDest);
}
fis = new FileInputStream(Source);
fos = new FileOutputStream(Destination);
byte[] tampon=new byte[1024];
int lu = 0;
do {lu=fis.read(tampon);
if (lu!=-1) fos.write(tampon,0,lu);}
while (lu!=-1);
} catch (IOException e){
System.err.println(e.getMessage()) ;

}finally {
if (fis!=null){
try {
fis.close();
back=true;
}catch (IOException e){
}
}
if (fos!=null){
try {
back2=true;
fos.close();
}catch (IOException e){
}
}
}
}
if(back & back2){
back=true;
}else back = false;

return back;
}

}

Cette classe permet egalement de copier les repertoires et leur contenu selon la profondeur de la copie que tu souhaite choisir ...

tu y retrouvera la copie du fichier...
Le code est optimisable (pas tout frais ^^ ) mais tu as l'essentiel :)

Maddictivement.
Ajouter un commentaire
Ce document intitulé « [Java - File] Lecture et écriture simultanée » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?