Lecture d'un fichier (String) : StreamCorruptedException sur le 2ème élément
Bonjour,
Lors du démarrage d'une application web sous Tomcat, il y a écriture d'une ligne dans le fichier system.txt avec la méthode suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ...
File systemFile = new File(pathfile);
....
public static void setDate() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy 'at' HH:mm:ss");
Date date = new Date();
String st;
try {
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream (systemFile,true));
st = "restart : " + sdf.format(date) + "\n";
oos.writeUTF(st);
oos.close();
} catch (FileNotFoundException e){
log.debug("setDate() : FileNotFoundException = " + e);
} catch (IOException e) {
log.debug("setDate() : IOException = " + e);
}
} |
Le fichier peut être consulté dans un navigateur par l'administrateur de l'application. La lecture de ce fichier s'effectue avec la méthode suivante :
Code:
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
| ..
private static final Log log = LogFactory.getLog(SystemStart.class);
private static FileInputStream fis = null;
private static ObjectInputStream ois = null;
private static Vector vect;
...
public static Vector readSystemFile() {
String st = "";
vect = new Vector();
try {
fis = new FileInputStream (new File("pathfile"));
ois = new ObjectInputStream (fis);
}
catch (FileNotFoundException ex){
log.debug("readSystemFile() : FileNotFoundException = " + ex);
}
catch (IOException ex){
log.debug("readSystemFile() : IOException-1 = " + ex);
}
try {
while(fis.available() > 0) {
st = ois.readUTF();
vect.add(st);
log.debug("readSystemFile() : st = " + st);
}
}
catch (IOException ex){
log.debug("readSystemFile() : IOException-2 = " + ex);
}
return vect;
} |
Si la lecture de la 1ère ligne/string [st = ois.readUTF()] est correcte, j'ai l'exception suivante lors de la lecture du 2ème élément :
Code:
readSystemFile() : IOException-2 = java.io.StreamCorruptedException: invalid type code: AC
Si au niveau du système je visualise le fichier créé :
Citation:
cat /home/cabosse/services/system.txt
’w!restart : 20/12/16 at 10:43:47
’w!restart : 20/12/16 at 10:46:29
’w!restart : 20/12/16 at 10:50:17
Je constate la présence de 4 caractères bizarres en début de ligne; ces caractères n'apparaissent pas lors de la visu de la 1ère ligne dans le navigateur pas plus que dans le fichier de log [log.debug("readSystemFile() : st = " + st);] : sans doute du à l'encodage UTF.
Dans une autre partie de l'application, j'utilise le même principe pour l'écriture/lecture de fichier, mais dans ce cas sur des objets encapsulant 4 String, et j'ai toujours cette exception sur la lecture du 2ème objet. Je dois donc faire une erreur sur le principe employé!
Des pistes ... des idées à explorer?