Java:读取文件dissapair的每一行的第一个字母

时间:2014-06-03 10:17:34

标签: java debugging qa

出于培训目的,我正在编写一个用于读/写/修改文本文件的类。

我的问题是我的一个函数(openFile),其目的是将文本文件内容转换为ArrayList似乎被窃听:每行的第一个字符消失。

以下是java文件,测试脚本和测试脚本结果:

TextFile.java

/**
 * 
 */
package files;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

/**
 * @author Erwan GEORGET <egeorget@openmailbox.org>
 * @licence GPLv3
 *
 */
public class TextFile {

    //-----------------------------------Données------------------------------------

    ArrayList<String> arrayString;

    //--------------------------------Constructeurs---------------------------------

    public TextFile(){//ok
        this.arrayString = new ArrayList<String>();
    }

    //------------------------------Méthodes publiques------------------------------

    //---------Modificateurs locaux--------

    public void addText(String text){//ok
        arrayString.add(text);
    }

    public String readTextAt(int index){//ok
        return arrayString.get(index);
    }

    public void rmTextAt(int index){ //ok
        this.arrayString.remove(index);
    }

    //---------------écriture---------------

    public void writeToNewFile(String chemin) throws IOException{//ok
        PrintWriter bw = new PrintWriter(new BufferedWriter(new FileWriter(new File(chemin))));
        int i=0;
        while (i<this.arrayString.size()){
            System.out.println(this.arrayString.get(i)+ " écrit dans le fichier "+chemin);
            bw.println(this.arrayString.get(i));
            i++;
        }
        bw.close();
    }

    //----------------Lecture----------------

    public String readLineFromFile(String chemin, int ligne) throws IOException{
        String result="EOF";
        ArrayList<String> tempo = new ArrayList<String>();
        tempo=openFile(chemin);
        result=tempo.get(ligne);
        return result;
    }

    public String readFromFile(String chemin) throws IOException{
        String result="";
        int i=0;
        ArrayList<String> tempo = new ArrayList<String>();
        tempo=openFile(chemin);
        result=tempo.get(i);
        i++;
        while (i < tempo.size() ){
            result=result+"\n"+tempo.get(i);
            i++;
        }
        return result;
    }

    //---------------Chargement---------------

    public void loadFromFile(String chemin) throws IOException{//ok
        this.writeToNewFile(chemin+".old");
        this.arrayString=openFile(chemin);
    }

    //------------------Débug-----------------

    public void debug(){//ok
        int i = 0;
        System.out.println("Contenu de arrayString: ");
        while (i < this.arrayString.size()){
            System.out.println(this.arrayString.get(i));
            i++;
        }
    }

    //-------------------------------Méthodes privées-------------------------------

    protected ArrayList<String> openFile(String chemin) throws IOException{//bug
        ArrayList<String> result=new ArrayList<String>();
        FileReader ligne = new FileReader(chemin);
        BufferedReader buffer = new BufferedReader(ligne);
        System.out.println("Ouverture du fichier "+chemin+"\nLecture...");
        while (buffer.read() != -1){
            String tempo=buffer.readLine();
            System.out.println(tempo);
            result.add(tempo);
            }
        buffer.close();
        System.out.println("Fermeture du fichier "+chemin);
        return result;
    }


}

TestTextFile.java

/**
 * 
 */
package files;

import java.io.*;
import java.util.*;

/**
 * @author erwan
 *
 */
public class TestTextFile {

    /**
     * @param args
     * @throws IOException 
     * @throws InterruptedException 
     */
    public static void main(String[] args) throws IOException, InterruptedException {
        // TODO Stub de la méthode généré automatiquement
        int test=0;
        TextFile file = new TextFile();
        Date date = new Date();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        System.out.println(date);
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.debug();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.addText(date.toString()+" test 3.1");
        System.out.println("Emplacement 0 de arrayString :");
        System.out.println(file.readTextAt(0));
        System.out.println("Emplacement 1 de arrayString :");
        file.addText(date.toString()+" test 3.2");
        System.out.println(file.readTextAt(1));
        file.writeToNewFile("/home/erwan/data_test");
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.debug();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.loadFromFile("/home/erwan/data_test");
        file.debug();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        Thread.sleep(2000);
        date = new Date();
        file.addText(date.toString()+" test 5");
        file.debug();
        file.writeToNewFile("/home/erwan/data_test");
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.rmTextAt(0);
        file.debug();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        file.rmTextAt(0);
        file.debug();
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        System.out.println(file.readLineFromFile("/home/erwan/data_test",0));
        System.out.println("-------------TEST "+test+"-------------");
        test++;
        System.out.println(file.readFromFile("/home/erwan/data_test"));
    }

}

Java控制台:

-------------TEST 0-------------
Tue Jun 03 12:04:19 CEST 2014
-------------TEST 1-------------
Contenu de arrayString: 
-------------TEST 2-------------
Emplacement 0 de arrayString :
Tue Jun 03 12:04:19 CEST 2014 test 3.1
Emplacement 1 de arrayString :
Tue Jun 03 12:04:19 CEST 2014 test 3.2
Tue Jun 03 12:04:19 CEST 2014 test 3.1 écrit dans le fichier /home/erwan/data_test
Tue Jun 03 12:04:19 CEST 2014 test 3.2 écrit dans le fichier /home/erwan/data_test
-------------TEST 3-------------
Contenu de arrayString: 
Tue Jun 03 12:04:19 CEST 2014 test 3.1
Tue Jun 03 12:04:19 CEST 2014 test 3.2
-------------TEST 4-------------
Tue Jun 03 12:04:19 CEST 2014 test 3.1 écrit dans le fichier /home/erwan/data_test.old
Tue Jun 03 12:04:19 CEST 2014 test 3.2 écrit dans le fichier /home/erwan/data_test.old
Ouverture du fichier /home/erwan/data_test
Lecture...
ue Jun 03 12:04:19 CEST 2014 test 3.1
ue Jun 03 12:04:19 CEST 2014 test 3.2
Fermeture du fichier /home/erwan/data_test
Contenu de arrayString: 
ue Jun 03 12:04:19 CEST 2014 test 3.1
ue Jun 03 12:04:19 CEST 2014 test 3.2
-------------TEST 5-------------
Contenu de arrayString: 
ue Jun 03 12:04:19 CEST 2014 test 3.1
ue Jun 03 12:04:19 CEST 2014 test 3.2
Tue Jun 03 12:04:21 CEST 2014 test 5
ue Jun 03 12:04:19 CEST 2014 test 3.1 écrit dans le fichier /home/erwan/data_test
ue Jun 03 12:04:19 CEST 2014 test 3.2 écrit dans le fichier /home/erwan/data_test
Tue Jun 03 12:04:21 CEST 2014 test 5 écrit dans le fichier /home/erwan/data_test
-------------TEST 6-------------
Contenu de arrayString: 
ue Jun 03 12:04:19 CEST 2014 test 3.2
Tue Jun 03 12:04:21 CEST 2014 test 5
-------------TEST 7-------------
Contenu de arrayString: 
Tue Jun 03 12:04:21 CEST 2014 test 5
-------------TEST 8-------------
Ouverture du fichier /home/erwan/data_test
Lecture...
e Jun 03 12:04:19 CEST 2014 test 3.1
e Jun 03 12:04:19 CEST 2014 test 3.2
ue Jun 03 12:04:21 CEST 2014 test 5
Fermeture du fichier /home/erwan/data_test
ue Jun 03 12:04:21 CEST 2014 test 5
-------------TEST 9-------------
Ouverture du fichier /home/erwan/data_test
Lecture...
e Jun 03 12:04:19 CEST 2014 test 3.1
e Jun 03 12:04:19 CEST 2014 test 3.2
ue Jun 03 12:04:21 CEST 2014 test 5
Fermeture du fichier /home/erwan/data_test
e Jun 03 12:04:19 CEST 2014 test 3.1
e Jun 03 12:04:19 CEST 2014 test 3.2
ue Jun 03 12:04:21 CEST 2014 test 5

3 个答案:

答案 0 :(得分:3)

在while循环之前移除i++

i++; <= remove it
        while (i < tempo.size() ){
            result=result+"\n"+tempo.get(i);
            i++;
        }

答案 1 :(得分:1)

您正在openFile()方法中使用BufferedReader,因此您处于正确的轨道上。

你应该使用BufferedReader.readLine()而不是read()来一次读取石灰:

String nextLine = null;
while ((nextLine = buffer.readLine()) != null) {
  result.add(nextLine);
}

其中resultArrayList<String>bufferBufferedReader

答案 2 :(得分:0)

openFile中的这一行是错误的:

while (buffer.read() != -1){

您正在从缓冲区读取,但您没有使用内容。它只是被丢弃。

您需要将其替换为:

   String tempo =null;
   while((tempo=buffer.readLine())!=null){
        result.add(tempo);
   }