2015-12-06 1 views
1

J'apprenais des opérations de fichiers Java, et j'essayais de lire le nième octet comme un caractère dans un fichier texte. Je RandomAccessFile (je ne suis pas sûr que ce soit le module droit d'utiliser ici), et mon code estJava RandomAccessFile Comment lire le nième octet comme caractère

import java.io.RandomAccessFile; 
public class testclass { 

public static void main(String[] args) throws IOException { 
    RandomAccessFile f = new RandomAccessFile("temptext.txt", "r"); 
    f.seek(200); 
    System.out.println(f.readChar()); 
    } 
} 

Ce imprime des caractères inconnus, qui ne sont pas mentionnés dans le fichier texte. Qu'est-ce que je fais mal ici? Mon but final est d'inverser le texte entier dans le fichier texte en utilisant un forloop, si je peux le faire correctement.

+1

Les octets et les caractères ne sont pas toujours alignés (pour utf-8 par exemple). Quel jeu de caractères avez-vous dans le fichier texte? – Jan

+0

@Jan c'est le texte ascii par défaut dans linux avec les terminateurs de ligne de style linux. Il a été créé avec un vi. – scott

Répondre

2

Cocher cette JavaDoc:

public final omble readChar() throws IOException

lit un caractère de ce fichier. Cette méthode lit deux octets à partir du fichier, en commençant par le pointeur de fichier en cours. Si les octets lus, dans l'ordre, sont b1> et b2, où 0 < = b1, b2 < = 255, alors le résultat est égal à: (char) ((b1 < < 8) | b2)

Pour que votre exemple fonctionne, vous devez utiliser readByte() à la place.

+0

Merci Jan. Après cela, j'ai pu voir que la valeur retournée est la valeur ASCII du personnage. – scott