gpt4 book ai didi

java - Java:读取时文件损坏的每一行的第一个字母

转载 作者:行者123 更新时间:2023-12-01 18:31:23 26 4
gpt4 key购买 nike

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

我的问题是我的功能之一(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

最佳答案

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

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

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


其中 result是您的 ArrayList<String>,而 buffer是您的 BufferedReader

关于java - Java:读取时文件损坏的每一行的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24012580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com