我正在尝试阅读此文件:
Distinguido / a cliente:
Le damos la bienvenida a nuestra empresa y deseamos que nuestra relaciónseasiempre muy satisffactoria。
Muy atentamente,
El导演
并且必须这样做就好像文件中的单词是“Paraula”对象一样。 这是Paraula类:
public class Paraula {
private static final int MAXIM = 900;
public char[] lletres;
public int longitud;
public static boolean salto;
/**
* El constructor Paraula crea una objecte paraula de longitud 0 (buida)
*/
public Paraula() {
lletres = new char[MAXIM];
longitud = 0;
}
/**
* passa la paraula a cadena de caràcters
* @return
*/
@Override
public String toString() {
String s = "";
for (int i = 0; i < longitud; i++) {
s += lletres[i];
}
return s;
}
/**
* Afegeix una lletra que es passa com a paràmetre a la paraula
* @param c
*/
public void afegirCaracter(char c) {
if (longitud < MAXIM) {
lletres[longitud] = c;
longitud++;
}
}
/**
* compara l'objecte amb la paraula passada per paràmetre
* i retorna vertader si són iguals. És la cerca d'un caràcter diferent
* @param p
* @return
*/
// public boolean esIgualA(Paraula p) {
// int i = 0;
// while (lletres[i] == p.lletres[i] && i < longitud) {
// i++;
// }
// return lletres[i] == p.lletres[i];
// }
public boolean esIgualA(Paraula b) {
boolean iguals = longitud == b.longitud;
for (int idx = 0; (idx < longitud) && iguals; idx++) {
iguals = lletres[idx] == b.lletres[idx];
}
return iguals;
}
/**
* retorna vertader si la parula té longitud zero
* @return
*/
public boolean buida() {
return longitud == 0;
}
}
我有这门课来阅读文件:
public class FicheroPalabraIn {
private int x;
private FileReader fin = null;
public static boolean salto;
/**
* El constructor FitxerParaulaIn crida al constructor de FileReader i
* llegeix fins al principi de la primera paraula si n'hi ha cap o fins al
* final de fitxer en cas contrari
*
* @param nom
* @throws Exception
*/
public FicheroPalabraIn(String nom) throws Exception {
fin = new FileReader(nom);
x = fin.read();
principiParaula();
}
/**
* tanca el fitxer de caràcters
*
* @throws Exception
*/
public void TancaFitxer() throws Exception {
fin.close();
}
/**
* El mètode llegir retorna una paraula del fitxer, per això cerca el final
* de la paraula, en aquest cas s'ha suposat que no hi ha signes de
* puntuació diferents de blanc i que la paraula mai serà més gran del
* previst. El programa és una cerca del final de la paraula Després de
* llegir la paraula ens posicionam al principi de la següent o al fi de
* fitxer
*
* @return
*/
public Paraula llegir() throws Exception {
Paraula p = new Paraula();
char c = (char) x;
while ((c != ' ') && (c != '\n') && (c != '\r') && (x != -1)) {
p.afegirCaracter(c);
x = fin.read();
c = (char) x;
}
principiParaula();
return p;
}
public Paraula llegirCarta() throws Exception { //in this method I use a boolean to indicate when it reads a \n but it doesn't work as expected
Paraula p = new Paraula();
char c = (char) x;
while (x != -1) {
x = fin.read();
c = (char) x;
if ((c == '\n') || (c == '\r')) {
salto = true;
} else {
p.afegirCaracter(c);
}
}
principiParaula();
return p;
}
//---------------------------------------------------------------------------------
public Paraula llegirNombre() throws Exception {
Paraula p = new Paraula();
char c = (char) x;
while ((c != '#') && (x != -1)) {
p.afegirCaracter(c);
x = fin.read();
c = (char) x;
}
principiParaula();
return p;
}
public Paraula llegirDireccion() throws Exception {
Paraula p = new Paraula();
char c = (char) x;
while ((x != -1) && (c != '\n') && (c != '\r')) {
p.afegirCaracter(c);
x = fin.read();
c = (char) x;
}
principiParaula();
return p;
}
//----------------------------------------------------------------------------------
//El mètode principiParaula és privat i és una cerca del principi de paraula
private void principiParaula() throws Exception {
char c = (char) x;
while (c == ' ' || c == '\n' || c == '\r') {
x = fin.read();
c = (char) x;
}
}
/**
* El mètode quedenParaules retorna vertader si no s'està al fi de fitxer
*
* @return
*/
public boolean QuedenParaules() {
return x != -1;
}
}
问题是我需要读取文件,然后将内容写入另一个文件,但它不会读取“\ n”“\ r”,所以当我写它时,源文件出现在新文件中只有一行。如何使它“保存”或知道何时将char读取为'\ n'以将其写入新文件并仍然使用这种读取方法,就好像这些单词是Paraula对象一样?
谢谢
答案 0 :(得分:0)
听起来你会想要使用readLine()
类中的BufferedReader
函数来逐行解析字符串并创建Paraula对象。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html
答案 1 :(得分:0)
我想你正在初始化FicheroPalabraIn然后调用llegirCarta()。
此方法正确检测\ r和\ n,但它不会将它们存储在Paraula类型的对象中,只会将静态字段salto标记为true。
如果你想存储这些字符,请在这些情况下调用afegirCaracter()。
另一方面,文件中的第一个字符不是以这种方式存储的,它在对principiParaula()的调用中被遗忘了