Utilisation de BufferedReader pour lire le fichier texte
J'ai des problèmes avec L'utilisation du BufferedReader
Je veux imprimer le 6 lignes d'un fichier texte:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
while (br.readLine() != null) {
System.out.println(br.readLine());
}
in.close();
}
Maintenant, à partir de ce que je peux rassembler chaque fois que j'appelle la méthode readLine (), elle passe automatiquement à la ligne suivante.
Donc je ne peux pas utiliser la condition br.readLine ()!= null car il va déjà l'avancer d'une ligne et j'obtiens la sortie:
Line 2
Line 4
Line 6
Quelle Condition dois-je utiliser pour vérifier s'il y a encore une nouvelle ligne dans le champ de texte.
Merci l'avance!
8 réponses
C'est le problème:
while (br.readLine() != null) {
System.out.println(br.readLine());
}
Vous avez deux appels à readLine
- le premier seulement vérifie qu'il y a une ligne (mais la lit et la jette) et le second lit la ligne suivante . Vous voulez:
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Maintenant, nous ne faisons qu'appeler readLine()
Une fois par itération de boucle, et en utilisant la ligne que nous avons lue à la fois pour le "avons-nous terminé?"et" imprimer la ligne " pièces.
Vous lisez line
à travers la boucle while
et à travers la boucle vous lisez la ligne suivante, alors lisez-la simplement dans while loop
String s;
while ((s=br.readLine()) != null) {
System.out.println(s);
}
Vous pouvez affecter le résultat de br.readLine()
à une variable et l'utiliser à la fois pour le traitement et pour la vérification, comme ceci:
String line = br.readLine();
while (line != null) { // You might also want to check for empty?
System.out.println(line);
line = br.readLine();
}
private void readFile() throws Exception {
AsynchronousFileChannel input=AsynchronousFileChannel.open(Paths.get("E:/dicom_server_storage/abc.txt"),StandardOpenOption.READ);
ByteBuffer buffer=ByteBuffer.allocate(1024);
input.read(buffer,0,null,new CompletionHandler<Integer,Void>(){
@Override public void completed( Integer result, Void attachment){
System.out.println("Done reading the file.");
}
@Override public void failed( Throwable exc, Void attachment){
System.err.println("An error occured:" + exc.getMessage());
}
}
);
System.out.println("This thread keeps on running");
Thread.sleep(100);
}
Peut-être que vous voulez dire ceci:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
String line = br.readLine();
while (line!=null) {
System.out.println(line);
line = br.readLine();
}
in.close();
}
Essayez:
String text= br.readLine();
while (text != null)
{
System.out.println(text);
text=br.readLine();
}
in.close();
Ou
public String getFileStream(final String inputFile) {
String result = "";
Scanner s = null;
try {
s = new Scanner(new BufferedReader(new FileReader(inputFile)));
while (s.hasNext()) {
result = result + s.nextLine();
}
} catch (final IOException ex) {
ex.printStackTrace();
} finally {
if (s != null) {
s.close();
}
}
return result;
}
Cela obtient également la première ligne.
Vous pouvez le stocker dans un tableau, puis utiliser la ligne que vous voulez.. c'est l'extrait de code que j'ai utilisé pour lire la ligne du fichier et la stocker dans un tableau de chaînes, j'espère que cela vous sera utile:)
public class user {
public static void main(String x[]) throws IOException{
BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
String[] user=new String[30];
String line="";
while ((line = b.readLine()) != null) {
user[i]=line;
System.out.println(user[1]);
i++;
}
}
}