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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
readSystemFile() : IOException-2 = java.io.StreamCorruptedException: invalid type code: AC
Si au niveau du système je visualise le fichier créé :
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?