Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用filewriter将新文件写入csv文件_Java_File_Csv_Stream_Filewriter - Fatal编程技术网

Java 使用filewriter将新文件写入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

我正在处理一个包含45312个实例(行)和8个属性的CSV文件。我想修改(使用一些数学运算)输入csv文件并编写它。为了修改CSV,我从每个实例(行)中提取了每个列值(v=“逗号分隔位置”),然后尝试修改它。但我在这里面临的问题是,当for循环移动到下一个迭代(如v=2中的v=3)时,上一个迭代(v=2)中所有修改的实例值都会恢复到其原始状态。最后,我希望新的CSV文件与所有修改处理

    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次迭代中的每一次迭代中,您都会在文件上打开一个新的扫描仪,从而始终从文件的开头开始读取
正如Tom在评论中所说,使用专用于CSV文件解析和生成的库。它将具有以下优点:

  • 正确的
  • 经过许多开发人员的测试和优化
  • 提供更高级别的API
  • 正确处理值的转义

您应该考虑使用现有的框架之一来处理csv文件。不要重新发明这个轮子。