J'ai un éditeur de texte qui utilise un code presque identique à celui ci-dessous pour la lecture et l'écriture. Lorsque j'ouvre de petits fichiers pour les éditer, je reçois toujours cette erreur lorsque j'essaie de les sauvegarder à nouveau. La chose vraiment intéressante est que mon éditeur de texte fonctionne bien pour les fichiers d'environ 600 octets ou plus (semble varier à chaque fois), comportement que je n'ai pas pu reproduire ici. Ma solution de contournement actuelle consiste à vérifier la taille du fichier < 1024 octets, et d'utiliser java.io si c'est le cas.FileNotFoundException à l'ouverture FileOutputStream sur le même fichier lu en utilisant java nio
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
public class Test {
public static void main(String[] args) {
String text = null;
try {
FileInputStream fis = new FileInputStream("test.txt");
FileChannel ifc = fis.getChannel();
CharBuffer cb = Charset.forName("ISO-8859-15").newDecoder().
decode(ifc.map(FileChannel.MapMode.READ_ONLY, 0,
(int) ifc.size()));
text = cb.toString();
ifc.close();
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
FileOutputStream fos = new FileOutputStream("test.txt");
OutputStreamWriter osw = new OutputStreamWriter(
fos, "ISO-8859-15");
osw.write(text);
osw.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Pour le code ci-dessus, je reçois cette erreur pour différentes tailles de test.txt de 4 octets à 10kb:
java.io.FileNotFoundException: test.txt (The requested operation cannot be perfo
rmed on a file with a user-mapped section open)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at Test.main(Test.java:23)
Quelqu'un peut-il expliquer ce que je fais mal et comment je peux obtenir ceci pour travailler tout en lisant avec nio?