我有以下文本文件,首先是0或1,然后是两个字符串,所有三个都用逗号分隔:
0 , Bx , Cz
1 , By , Cx
0 , Bz , Cy
etc. , etc. , etc.
我有以下代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;
public class Manager {
static Scanner scanner;
public Manager() {
}
public static void chooseFile(String thisFile) {
try {
scanner = new Scanner(new File(thisDeck));
scanner.useDelimiter(",");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
static String getB() {
String b = null;
if (scanner.hasNextLine()) {
String a = scanner.next();
do {
if (a.equals("1")) {
scanner.nextLine();
a = scanner.next();
}
if (a.equals("0")) {
b = scanner.next();
}
} while (scanner.hasNextLine() && a.equals("1"));
}
if (!scanner.hasNextLine()) {
b = “Done.”;
}
return b;
}
static String getC() {
String c = null;
if (scanner.hasNextLine()) {
c = scanner.nextLine().substring(2);
} else {
c = “Done.”;
}
return c;
}
static void changeA1() {
//Here I want to change a value in the first "column" A to 1
//The row/line to be changed is the one that the scanner just passed
}
static void changeA0() {
//Here I want to change a value in the first "column" A to 0
//The row/line to be changed is the one that the scanner just passed
}
}
我的问题是如何将值A更改为0或1? GUI(调用此类)仅允许用户在调用getB()然后调用getC()之后更改值-A,因此当用于更改值A的函数时,扫描程序位于行的末尾。将调用该行。我可以用第二台扫描仪编辑值-A还是有另一种方式?
答案 0 :(得分:0)
Scanner
根本不允许对文件进行任何修改。为此,您必须使用FileWriter
或其他类。并且通常不建议使用两个对象同时修改和读取文件。大多数类甚至不允许这样做,因为文件内容通常会被流式传输(文件一直打开,并且在处理完整个缓冲区时会加载新的块)。
最简单的方法很可能是RandomAccessFile
(http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html)。
如果值始终是固定大小的话,这还可以充分加快完整代码的速度。但是如果没有关于文件结构的更多信息,推荐任何东西都是相当困难的。