有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java读取引号中逗号分隔的值

我陷入了这样一种情况:我得到一个字节[]中的文件,该文件的引号中有逗号分隔的值,我想将其保存为CSV文件,然后读取此文件

通过字节[]获取的示例数据:

"hi","how,are","you","what is","this"

"hi","how are","you","what is","this"

"hi","how,are","you","what, is","this"

以下是我以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格式保存的帮助吗


共 (1) 个答案

  1. # 1 楼答案

    你能试试下面的代码吗。 我把它和它的作品做得很好

    &13; 第13部分,;
    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){}
          }
        }
        }
    }
    和#13;
    和#13;