Nor*_*oya 0 java csv swing jtable
我正在处理一个JTable和CSV文件,我必须保存插入表中的数据,然后重新打开,如果用户需要进行一些修改.到目前为止,我可以保存并加载从我正在讨论的表创建的CSV文件,但是BufferedWriter对象在每行的末尾添加一个逗号,这会在加载现有CSV文件时产生新的空白列.
这是我的代码,我试图限制这个问题,但它没有成功.
if(jTable1.getModel()==this.m){
File file = new File(this.tfSelectedSpreadsheet.getText().toString());
if(file.exists() && !file.isDirectory()){
file.delete();
}
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(this.tfSelectedSpreadsheet.getText().toString()),"UTF-8"));
for(int i=0; i<jTable1.getColumnCount();i++){
bfw.append(jTable1.getColumnName(i));
if(i<jTable1.getColumnCount()) bfw.append(",");
else bfw.newLine();
}
bfw.newLine();
for(int i=0;i<jTable1.getRowCount();i++){
for(int j=0;j<jTable1.getColumnCount();j++){
bfw.append((String)jTable1.getValueAt(i,j));
if(j<jTable1.getColumnCount()) bfw.append(",");
bfw.newLine();
}
bfw.newLine();
}
bfw.close();
}
Run Code Online (Sandbox Code Playgroud)
这就是这段代码生成的CSV文件的样子:
Link,Long,Lat,CRS,
R011,120.1126,-33.5422,GDA94,
R014,120.1126,-33.5422,GDA94,
R019,120.1126,-33.5422,GDA94,
R011,120.1126,-33.5422,GDA94,
R011,120.1126,-33.5422,GDA94,
R011,120.1126,-33.5422,GDA94,
R015,120.1126,-33.5422,GDA94,
R014,120.1126,-33.5422,GDA94,
WANDA,25.12.1990,-37.0991,GDA90,
Run Code Online (Sandbox Code Playgroud)
为了解决这个"逗号"问题,我该怎么办?
从Java 8开始,您可以使用StringJoiner:
StringJoiner joiner = new StringJoiner(",");
joiner.add("First");
joiner.add("Second");
String row = joiner.toString(); // produces "First,Second"
Run Code Online (Sandbox Code Playgroud)
您甚至可以定义前缀和后缀:
StringJoiner joiner = new StringJoiner(",", "[", "]");
joiner.add("First");
joiner.add("Second");
String row = joiner.toString(); // produces "[First,Second]"
Run Code Online (Sandbox Code Playgroud)
如果您的数据已作为集合(或其他可生成Stream的内容)可用,您还可以使用新的流API而不是编写另一个循环:
List<String> data = ...
String row = data.stream().collect(Collectors.joining(","));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |