Salut a tous,
J'ai prgrammé une fonction ecrire_dans_une_fichier(String path_fichier,String string_ajouté,int position)
qui permet d'ajouter une string a une fichier dans un endroit precis sans ecraser aucune chose(car j'ai trouvé la classe RandomAccessFile mais son probleme qu'elle ecrase les cacactéres situé a la position position
:si vous connaissez d'autres moyens pour faire ce que j'ai fait c'est du bienvenue ).
Cette foction est valable pour une seule appel,cependant lorsque je l'utilise plus qu'une fois elle affiche des resultats bizarres et voila
pour cela un class qui illustre cette probleme:
code:
package convertisseur;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
public class File_youssef1985 extends File {
public BufferedReader src=null;
public BufferedWriter dest=null;
public static void ecrire_fichier(RandomAccessFile f,String s,int pos) throws IOException
{
File temp1= new File("temp1meguebliyoussef.txt");
File temp2=new File("temp2meguebliyoussef.txt");
RandomAccessFile partie1=new RandomAccessFile(temp1,"rw");
RandomAccessFile partie2=new RandomAccessFile( temp2,"rw");
copier(f,partie1,0,pos);
copier(f,partie2,pos,f.length());
partie1.seek(partie1.length());
partie1.writeBytes(s);
partie1.seek(partie1.length());
int c;
partie2.seek(0);
while((c=partie2.read())!=-1)
{
partie1.write(c);
}
// copier(partie1,f,0,f.length());
partie1.seek(0);
f.seek(0);
while((c=partie1.read())!=-1)
{
f.write(c);
}
temp1.deleteOnExit();
temp2.deleteOnExit();
partie1.close();
partie2.close();
f.close();
}
public static void copie_BufferedReader (BufferedReader original,BufferedWriter copie) throws IOException {
int c;
while ((c = original.read()) != -1)
copie.write(c);
original.close();
copie.close();
}
public static boolean copier( RandomAccessFile sourceFile, RandomAccessFile destination ,int positiondebut,long positionfin)
{
boolean resultat = false;
// Declaration des flux
java.io.FileOutputStream destinationFile=null;
try {
// Création du fichier :
// Ouverture des flux
// Lecture par segment de 0.5Mo
byte buffer[]=new byte[1*1];
int nbLecture;
sourceFile.seek(positiondebut);
while( (nbLecture = sourceFile.read()) != -1 && sourceFile.getFilePointer()<=positionfin) {
{
destination.write(nbLecture);
}}
// Copie réussie
resultat = true;
} catch( java.io.FileNotFoundException f ) {
} catch( java.io.IOException e ) {
} finally {
// Quoi qu'il arrive, on ferme les flux
try {
} catch(Exception e) { }
try {
} catch(Exception e) { }
}
return( resultat );
}
public static boolean copier( File source, File destination )
{
boolean resultat = false;
// Declaration des flux
java.io.FileInputStream sourceFile=null;
java.io.FileOutputStream destinationFile=null;
try {
// Création du fichier :
destination.createNewFile();
// Ouverture des flux
sourceFile = new java.io.FileInputStream(source);
destinationFile = new java.io.FileOutputStream(destination);
// Lecture par segment de 0.5Mo
byte buffer[]=new byte[512*1024];
int nbLecture;
while( (nbLecture = sourceFile.read(buffer)) != -1 ) {
destinationFile.write(buffer, 0, nbLecture);
}
// Copie réussie
resultat = true;
} catch( java.io.FileNotFoundException f ) {
} catch( java.io.IOException e ) {
} finally {
// Quoi qu'il arrive, on ferme les flux
try {
sourceFile.close();
} catch(Exception e) { }
try {
destinationFile.close();
} catch(Exception e) { }
}
return( resultat );
}
public static void ecrire_dans_une_fichier(String s,String t,int pos) throws IOException
{
RandomAccessFile g=new RandomAccessFile(s,"rw");
//copier(g,new RandomAccessFile("temp1.txt","rw"),0,g.length());
ecrire_fichier(g,t,pos);
g.close();
}
public static void main(String[] args) throws IOException, IOException
{
ecrire_dans_une_fichier("youcef120.html","chaine ajouté1",17);
ecrire_dans_une_fichier("youcef120.html","chaine ajouté2",33);
}
}
Afficher la suite