我需要从csv文件中查找变量,然后使用格式化程序将该变量打印到另一个文件。
此格式化程序本质上是一个模板,用于使用csv文件中包含的不同数据特征打印许多不同的文件。
类似于使用相同格式文件的许多不同棒球运动员的打印玩家统计数据。
我在类中声明了变量(SOI,SGI,SWI)并设置了格式化程序:
public class JavaPractice {
static double SOI;
static double SGI;
static double SWI;
private Formatter ei;
public void eorFile(){
try{
ei = new Formatter("M:\\MandNDrives\\mwallace\\JAVA for NEMS\\JavaPractice\\eorinput.ind");
}
catch(FileNotFoundException e){
System.out.println("Error");
}
然后我有另一种方法从csv文件中读取变量:
public void eorDB(){
String csvFile = "M:\\MandNDrives\\mwallace\\JAVA for NEMS\\EORModule\\NEMSEORDBEX1.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try {
br = new BufferedReader(new FileReader(csvFile));
br.readLine();
while ((line = br.readLine()) != null) {
String [] reservoir = line.split(cvsSplitBy);
String SOI = reservoir[1];
String SGI = reservoir[2];
String SWI = reservoir[3];
}
}catch (FileNotFoundException e) {
}catch (IOException e) {
}
}
然后我尝试使用格式化程序打印变量,但似乎没有从eorDB方法中获取变量
public void addData(){
ei.format("%d%d%d%n", SOI, SGI, SWI);
}
public void closeFile(){
ei.close();
}
但是,SOI,SGI和SWI变量似乎没有在方法之间正确共享。有什么想法吗?
答案 0 :(得分:0)
尝试从循环中调用 addData()(这样您就不会在每次迭代时覆盖变量)。
,您不小心声明具有相同名称的新的本地变量(通过在前面添加单词 String 他们)。
如果你想使用类变量,不要声明新变量!
while ((line = br.readLine()) != null) {
String [] reservoir = line.split(cvsSplitBy);
SOI = reservoir[1]; // do NOT declare a new string here!
SGI = reservoir[2];
SWI = reservoir[3];
addData(); // invoke addData() with current values
}
然而...... 很明显,这里不需要类变量(你可以只使用局部变量):
while ((line = br.readLine()) != null) {
String [] s = line.split(cvsSplitBy);
String o = s[1];
String g = s[2];
String w = s[3];
ei.format("%d%d%d%n", o, g, w);
}