Java 使用filewriter将新文件写入csv文件
我正在处理一个包含45312个实例(行)和8个属性的CSV文件。我想修改(使用一些数学运算)输入csv文件并编写它。为了修改CSV,我从每个实例(行)中提取了每个列值(v=“逗号分隔位置”),然后尝试修改它。但我在这里面临的问题是,当for循环移动到下一个迭代(如v=2中的v=3)时,上一个迭代(v=2)中所有修改的实例值都会恢复到其原始状态。最后,我希望新的CSV文件与所有修改处理Java 使用filewriter将新文件写入csv文件,java,file,csv,stream,filewriter,Java,File,Csv,Stream,Filewriter,我正在处理一个包含45312个实例(行)和8个属性的CSV文件。我想修改(使用一些数学运算)输入csv文件并编写它。为了修改CSV,我从每个实例(行)中提取了每个列值(v=“逗号分隔位置”),然后尝试修改它。但我在这里面临的问题是,当for循环移动到下一个迭代(如v=2中的v=3)时,上一个迭代(v=2)中所有修改的实例值都会恢复到其原始状态。最后,我希望新的CSV文件与所有修改处理 import java.io.File; import java.io.FileNotFound
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.*;
public class Normalization {
public static void main(String[] args)throws IOException {
String filename = "abc.csv";
File file = new File(filename);
BufferedWriter writer = null;
try{
writer = new BufferedWriter(new FileWriter("lyupdated.csv"));
for (int v = 1; v < 8; v++)
{
Scanner inputStream = new Scanner(file);
while (inputStream.hasNext())
{
String data = inputStream.next();
String[] values = data.split(",");
double balance = Double.parseDouble(values[v]);
balance=balance*10;//for mathoperation code simplification
values[v] = String.valueOf(balance);
// iterate through the values and build a string out of them
StringBuilder sb = new StringBuilder();
// String newData = sb.toString();
for (int i = 0; i < values.length; i++) {
sb.append(values[i]);
if (i < values.length - 1) {
sb.append(",");
}
}
System.out.println(sb.toString());
writer.write(sb.toString()+"\n");
}inputStream.close();
} writer.close();
}
catch (FileNotFoundException ex) {
Logger.getLogger(Normalization.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileWriter;
导入java.io.*;
公共类规范化{
公共静态void main(字符串[]args)引发IOException{
字符串filename=“abc.csv”;
文件=新文件(文件名);
BufferedWriter=null;
试试{
writer=newbufferedwriter(newfilewriter(“lyupdated.csv”);
对于(int v=1;v<8;v++)
{
扫描仪输入流=新扫描仪(文件);
while(inputStream.hasNext())
{
字符串数据=inputStream.next();
字符串[]值=data.split(“,”);
双倍余额=double.parseDouble(值[v]);
balance=balance*10;//用于mathoperation代码简化
values[v]=字符串。valueOf(余额);
//遍历这些值并从中生成一个字符串
StringBuilder sb=新的StringBuilder();
//字符串newData=sb.toString();
对于(int i=0;i
您的代码没有多大意义。您需要打开文件,使用循环逐行读取文件,并将每行拆分为8列
但是,看看你有什么:
for (int v = 1; v < 8; v++) {
Scanner inputStream = new Scanner(file);
for(int v=1;v<8;v++){
扫描仪输入流=新扫描仪(文件);
所以
- 您不会遍历文件的所有行,而是遍历7列
- 在7次迭代中的每一次迭代中,您都会在文件上打开一个新的扫描仪,从而始终从文件的开头开始读取
- 正确的
- 经过许多开发人员的测试和优化
- 提供更高级别的API
- 正确处理值的转义