Gestión de archivos en Java
Resuelto
sagon
-
Martin -
Martin -
Bonjour,
¿cómo se puede escribir en medio de un archivo con Java?
gracias de antemano
¿cómo se puede escribir en medio de un archivo con Java?
gracias de antemano
4 respuestas
Creo que quiere hacer streaming del archivo, una especie de sed.
--
El lobo, solitario y misterioso.
--
El lobo, solitario y misterioso.
No conocía el término de SEd, pero si es así, habrá que cargar el texto en una Colección, tal vez ArrayList<String>, hacer las operaciones sobre él y luego sobrescribir el texto.
En cualquier caso, no conozco en Java ningún flujo que permita al mismo tiempo la lectura (InputSream) y la escritura (OutputStream)
--
La confianza no excluye el control.
En cualquier caso, no conozco en Java ningún flujo que permita al mismo tiempo la lectura (InputSream) y la escritura (OutputStream)
--
La confianza no excluye el control.
Bonjour Martin,
Pour enregistrer une nouvelle entrée dans un fichier texte sans écraser le contenu existant, vous pouvez ouvrir le `BufferedWriter` en mode ajout. Cela vous permettra d'écrire à la fin du fichier sans écraser les lignes déjà présentes. Voici comment vous pourriez modifier votre code :
```java
BufferedWriter fic = new BufferedWriter(new FileWriter(choix.getSelectedFile(), true)); // Le 'true' permet d'ouvrir en mode ajout
```
Cela vous évitera d'avoir besoin de lire le fichier existant dans un tableau auxiliaire avant de l'écrire, simplifiant ainsi votre processus.
Pour votre question sur la création du fichier, vous pouvez vérifier si le fichier existe déjà. Si ce n'est pas le cas, vous pouvez le créer :
```java
File file = choix.getSelectedFile();
if (!file.exists()) {
file.createNewFile();
}
```
Quant à la taille du tableau `String[]`, Java ne supporte pas les tableaux dynamiques comme Pascal. Vous pouvez utiliser une `ArrayList<string>` à la place, qui peut croître dynamiquement :
```java
ArrayList<string> aux = new ArrayList<>();
```
Finalement, voici une version modifiée de votre méthode :
```java
public void enreg_entree() {
String chaine1;
String chaine2;
String chaine3;
ArrayList<string> aux = new ArrayList<>();
chaine1 = textField1.getText();
chaine2 = jTextField1.getText();
chaine3 = jTextField2.getText();
try {
JFileChooser choix = new JFileChooser();
choix.showOpenDialog(new JFrame());
File file = choix.getSelectedFile();
if (!file.exists()) {
file.createNewFile();
}
BufferedReader lecteur = new BufferedReader(new FileReader(file));
String ligne;
while ((ligne = lecteur.readLine()) != null) {
aux.add(ligne);
}
lecteur.close();
BufferedWriter fic = new BufferedWriter(new FileWriter(file, true)); // Mode ajout
for (String ligneExistante : aux) {
fic.write(ligneExistante);
fic.newLine();
}
fic.write(chaine1);
fic.newLine();
fic.write(chaine2);
fic.newLine();
fic.write(chaine3);
fic.close();
} catch (java.io.IOException exep) {
System.out.println("erreur: " + exep);
}
}
```
Cela devrait répondre à vos attentes. N'hésitez pas si vous avez d'autres questions !</string></string></string>
Pour enregistrer une nouvelle entrée dans un fichier texte sans écraser le contenu existant, vous pouvez ouvrir le `BufferedWriter` en mode ajout. Cela vous permettra d'écrire à la fin du fichier sans écraser les lignes déjà présentes. Voici comment vous pourriez modifier votre code :
```java
BufferedWriter fic = new BufferedWriter(new FileWriter(choix.getSelectedFile(), true)); // Le 'true' permet d'ouvrir en mode ajout
```
Cela vous évitera d'avoir besoin de lire le fichier existant dans un tableau auxiliaire avant de l'écrire, simplifiant ainsi votre processus.
Pour votre question sur la création du fichier, vous pouvez vérifier si le fichier existe déjà. Si ce n'est pas le cas, vous pouvez le créer :
```java
File file = choix.getSelectedFile();
if (!file.exists()) {
file.createNewFile();
}
```
Quant à la taille du tableau `String[]`, Java ne supporte pas les tableaux dynamiques comme Pascal. Vous pouvez utiliser une `ArrayList<string>` à la place, qui peut croître dynamiquement :
```java
ArrayList<string> aux = new ArrayList<>();
```
Finalement, voici une version modifiée de votre méthode :
```java
public void enreg_entree() {
String chaine1;
String chaine2;
String chaine3;
ArrayList<string> aux = new ArrayList<>();
chaine1 = textField1.getText();
chaine2 = jTextField1.getText();
chaine3 = jTextField2.getText();
try {
JFileChooser choix = new JFileChooser();
choix.showOpenDialog(new JFrame());
File file = choix.getSelectedFile();
if (!file.exists()) {
file.createNewFile();
}
BufferedReader lecteur = new BufferedReader(new FileReader(file));
String ligne;
while ((ligne = lecteur.readLine()) != null) {
aux.add(ligne);
}
lecteur.close();
BufferedWriter fic = new BufferedWriter(new FileWriter(file, true)); // Mode ajout
for (String ligneExistante : aux) {
fic.write(ligneExistante);
fic.newLine();
}
fic.write(chaine1);
fic.newLine();
fic.write(chaine2);
fic.newLine();
fic.write(chaine3);
fic.close();
} catch (java.io.IOException exep) {
System.out.println("erreur: " + exep);
}
}
```
Cela devrait répondre à vos attentes. N'hésitez pas si vous avez d'autres questions !</string></string></string>
El problema de sagon era agregar datos en medio del archivo, mientras que tú, si he entendido bien, podrías agregar tus datos al final del archivo sin problema con FileWriter(file,true);.
Para tu otra pregunta: el String[] es un poco pesado para manipular tus datos, sería mejor retomar lo que decía y usar una Collection.
Para tu otra pregunta: el String[] es un poco pesado para manipular tus datos, sería mejor retomar lo que decía y usar una Collection.
¡Gracias por tu respuesta!
Estoy retomando poco a poco, así que es cierto que un archivo de texto tiene la ventaja de poder controlarse fácilmente. Pensaba en modificar el código para hacer un archivo de tipo registro (lo cual debe ser más eficiente). ¿Una colección es equivalente a un registro?
Probaré tu truco para escribir al final. ¡Gracias!
Estoy retomando poco a poco, así que es cierto que un archivo de texto tiene la ventaja de poder controlarse fácilmente. Pensaba en modificar el código para hacer un archivo de tipo registro (lo cual debe ser más eficiente). ¿Una colección es equivalente a un registro?
Probaré tu truco para escribir al final. ¡Gracias!