【问题标题】:Read comma separated value in quotes读取引号中的逗号分隔值
【发布时间】:2016-09-28 05:46:32
【问题描述】:

我遇到的情况是,我在 byte[] 中获取了一个文件,该文件在引号中有逗号分隔的值,我想将其保存为 CSV 文件和然后读取这个文件。

我通过 byte[] 获取的示例数据:

“你好”、“你好”、“你”、“什么是”、“这个”

“嗨”、“你好”、“你”、“什么是”、“这个”

“你好”、“你好”、“你”、“什么、是”、“这个”

以下是我将其保存为 CSV 格式的代码。

byte[] bytes = myByteStream.getFile();
OutputStream out22 = new FileOutputStream("path/to/file/dummy.csv");
out22.write(bytes);
out22.close();

以及下面的代码来读取这个 CSV 文件。

  CSVReader reader = new CSVReader(new FileReader("path/to/file/dummy.csv"), ',');                
  String[] nextLine;

  while ((nextLine = reader.readNext()) != null)
  {
    System.out.println(nextLine[1]);
  }

我面临的问题是引号中有逗号的值,奇怪的是当我打开那个 csv 文件,然后用 csv“另存为”并运行上面的代码来读取它,然后 CSVReader 读取文件适当地。

所以我认为问题在于将文件保存为 csv。无法以 CSV 格式正确保存文件。

任何帮助,关于如何以正确的 CSV 格式保存它?

【问题讨论】:

标签: java bytearray opencsv


【解决方案1】:

你能试试下面的代码吗? 我执行了它,它的工作正常。

package stackoverflow;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MainJava{
     /** 
     * Read bytes from a File into a byte[].
     * 
     * @param file The File to read.
     * @return A byte[] containing the contents of the File.
     * @throws IOException Thrown if the File is too long to read or couldn't be
     * read fully.
     */
    public static byte[] readBytesFromFile(File file) throws IOException {
      InputStream is = new FileInputStream(file);
      
      // Get the size of the file
      long length = file.length();
  
      // You cannot create an array using a long type.
      // It needs to be an int type.
      // Before converting to an int type, check
      // to ensure that file is not larger than Integer.MAX_VALUE.
      if (length > Integer.MAX_VALUE) {
        throw new IOException("Could not completely read file " + file.getName() + " as it is too long (" + length + " bytes, max supported " + Integer.MAX_VALUE + ")");
      }
  
      // Create the byte array to hold the data
      byte[] bytes = new byte[(int)length];
  
      // Read in the bytes
      int offset = 0;
      int numRead = 0;
      while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
          offset += numRead;
      }
  
      // Ensure all the bytes have been read in
      if (offset < bytes.length) {
          throw new IOException("Could not completely read file " + file.getName());
      }
  
      // Close the input stream and return bytes
      is.close();
      return bytes;
  }
    
    /**
     * Writes the specified byte[] to the specified File path.
     * 
     * @param theFile File Object representing the path to write to.
     * @param bytes The byte[] of data to write to the File.
     * @throws IOException Thrown if there is problem creating or writing the 
     * File.
     */
    public static void writeBytesToFile(File theFile, byte[] bytes) throws IOException {
      BufferedOutputStream bos = null;
      
    try {
      FileOutputStream fos = new FileOutputStream(theFile);
      bos = new BufferedOutputStream(fos); 
      bos.write(bytes);
    }finally {
      if(bos != null) {
        try  {
          //flush and close the BufferedOutputStream
          bos.flush();
          bos.close();
        } catch(Exception e){}
      }
    }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多