Java CSV填充在压缩后更改为字节数组
所以我从前端收到一个CSV文件,我需要将其压缩并存储到MySql数据库中。问题是,在我将文件解压缩回来后,它被修改了,不再具有CSV结构(我使用ZIP进行压缩,但我也尝试过gzip)。例如,这是压缩前的文件Java CSV填充在压缩后更改为字节数组,java,file,csv,kotlin,compression,Java,File,Csv,Kotlin,Compression,所以我从前端收到一个CSV文件,我需要将其压缩并存储到MySql数据库中。问题是,在我将文件解压缩回来后,它被修改了,不再具有CSV结构(我使用ZIP进行压缩,但我也尝试过gzip)。例如,这是压缩前的文件 header1,header2,header3,header4,header5 val,val2,val3,val4,val5 val6,val7,val8,val9,val10 header1,header2,header3,header4,header5val1,val2,val3,v
header1,header2,header3,header4,header5
val,val2,val3,val4,val5
val6,val7,val8,val9,val10
header1,header2,header3,header4,header5val1,val2,val3,val4,val5val6,val7,val8.val9.val10
@Throws(Exception::class)
fun compressFile(file : ByteArray) : ByteArray {
val baos = ByteArrayOutputStream()
val zos = ZipOutputStream(baos)
val entry = ZipEntry("data.csv")
entry.size = file.size.toLong()
zos.putNextEntry(entry)
zos.write(file)
zos.closeEntry()
zos.close()
return baos.toByteArray()
}
@Throws(Exception::class)
fun decompressFile(file : ByteArray): ByteArray {
if (file.isEmpty()) return file
val gis = ZipInputStream(ByteArrayInputStream(file))
gis.nextEntry
val bf = BufferedReader(InputStreamReader(gis, "UTF-8"))
var outStr = ""
var line: String
while (bf.readLine().also { line = it ?: "" } != null) {
outStr += line
}
gis.close()
bf.close()
return outStr.toByteArray()
}
这是解压缩后的文件
header1,header2,header3,header4,header5
val,val2,val3,val4,val5
val6,val7,val8,val9,val10
header1,header2,header3,header4,header5val1,val2,val3,val4,val5val6,val7,val8.val9.val10
@Throws(Exception::class)
fun compressFile(file : ByteArray) : ByteArray {
val baos = ByteArrayOutputStream()
val zos = ZipOutputStream(baos)
val entry = ZipEntry("data.csv")
entry.size = file.size.toLong()
zos.putNextEntry(entry)
zos.write(file)
zos.closeEntry()
zos.close()
return baos.toByteArray()
}
@Throws(Exception::class)
fun decompressFile(file : ByteArray): ByteArray {
if (file.isEmpty()) return file
val gis = ZipInputStream(ByteArrayInputStream(file))
gis.nextEntry
val bf = BufferedReader(InputStreamReader(gis, "UTF-8"))
var outStr = ""
var line: String
while (bf.readLine().also { line = it ?: "" } != null) {
outStr += line
}
gis.close()
bf.close()
return outStr.toByteArray()
}
我需要将解压缩后的文件发送到python时间序列分析服务,它无法正确解析它
我直接将文件作为字节数组进行压缩/解压缩,我确信压缩是问题所在,因为我尝试存储和获取未压缩的CSV,它工作正常。
提前谢谢
下面是用于压缩的代码
header1,header2,header3,header4,header5
val,val2,val3,val4,val5
val6,val7,val8,val9,val10
header1,header2,header3,header4,header5val1,val2,val3,val4,val5val6,val7,val8.val9.val10
@Throws(Exception::class)
fun compressFile(file : ByteArray) : ByteArray {
val baos = ByteArrayOutputStream()
val zos = ZipOutputStream(baos)
val entry = ZipEntry("data.csv")
entry.size = file.size.toLong()
zos.putNextEntry(entry)
zos.write(file)
zos.closeEntry()
zos.close()
return baos.toByteArray()
}
@Throws(Exception::class)
fun decompressFile(file : ByteArray): ByteArray {
if (file.isEmpty()) return file
val gis = ZipInputStream(ByteArrayInputStream(file))
gis.nextEntry
val bf = BufferedReader(InputStreamReader(gis, "UTF-8"))
var outStr = ""
var line: String
while (bf.readLine().also { line = it ?: "" } != null) {
outStr += line
}
gis.close()
bf.close()
return outStr.toByteArray()
}
下面是用于解压缩的代码
header1,header2,header3,header4,header5
val,val2,val3,val4,val5
val6,val7,val8,val9,val10
header1,header2,header3,header4,header5val1,val2,val3,val4,val5val6,val7,val8.val9.val10
@Throws(Exception::class)
fun compressFile(file : ByteArray) : ByteArray {
val baos = ByteArrayOutputStream()
val zos = ZipOutputStream(baos)
val entry = ZipEntry("data.csv")
entry.size = file.size.toLong()
zos.putNextEntry(entry)
zos.write(file)
zos.closeEntry()
zos.close()
return baos.toByteArray()
}
@Throws(Exception::class)
fun decompressFile(file : ByteArray): ByteArray {
if (file.isEmpty()) return file
val gis = ZipInputStream(ByteArrayInputStream(file))
gis.nextEntry
val bf = BufferedReader(InputStreamReader(gis, "UTF-8"))
var outStr = ""
var line: String
while (bf.readLine().also { line = it ?: "" } != null) {
outStr += line
}
gis.close()
bf.close()
return outStr.toByteArray()
}
我认为,您丢失了NL字符,因为BufferedReader.readLine()只读取最后一行而不读取新行。也就是说,您合并了Line1Line2,但跳过了它们之间的新行 您不应该通过bufferedreader读取流,您需要读取整个内容,包括新行字符,请参阅
另请参见相关的感谢!它可以工作,不知道readLine跳过NL转义,还有@gidds,也谢谢你,非常好的资源。