当我按下此按钮时,它应该读取文件的下一行,每次按下它。为什么不使用这段代码。
btnFrw.setOnMousePressed(e -> {
try {
FileReader fr = new FileReader(file); //read 'file'
br = new BufferedReader(fr); //read 'file'
String line = "";
while ((line = b.readLine()) != null) {
line = br.readLine();
StringTokenizer st = new StringTokenizer(line, ",");
txtID.setText(st.nextToken());
txtG.setText(st.nextToken());
txtBP.setText(st.nextToken());
txtD.setText(st.nextToken());
txtCons.setText(st.nextToken());
txtSP.setText(st.nextToken());
}
} catch(Exception k) {
System.out.println("Reading file.");
}
});
好吧所以我想出来包括一个while循环。但那仍然没有做我需要的。只需单击一下,它将读取所有行并将文本区域设置为当前行。我需要的是每次单击按钮时移动到新行,并使用String tokenizer将文本区域设置为该行。
答案 0 :(得分:0)
您可以使用字符串数组分别存储每一行,然后在按钮单击时显示它们,而不是使用String来读取行。这是代码
String[] lineList = null;
try{
FileReader fr = new FileReader(file);//read 'file'
br = new BufferedReader(fr);//read 'file'
String line = "";
int lines = 0;
while (br.readLine() != null) {
lines++;
}
lineList = new String[lines];
int i = 0;
while ((br.readLine()) != null) {
lineList[i] = br.readLine();
i++;
}
btn.setOnAction(new EventHandler<ActionEvent>() {
int loop = 0;
@Override
public void handle(ActionEvent event) {
System.out.println(lineList[loop]);
loop++;
}
});
答案 1 :(得分:0)
将它们读入列表可能更容易,然后您甚至可以使用Files.readAll
。
final List<String> lines;
try {
lines = Files.readAllLines(file.toPath());
} catch (IOException ex) {
return;
}
//need final object since we use it in lambda
final AtomicInteger i = new AtomicInteger(0);
Button btnFrw = new Button("clk me");
btnFrw.setOnAction(e ->{
if (i.get() < lines.size())
System.out.println(i.get()+" "+lines.get(i.getAndIncrement()));
else
System.out.println("No more lines");
});