现在,我正在使用Google App Engine (GAE)开发一个应用程序。GAE不允许我创建临时文件夹来存储我的zipfile并从中读取。唯一的方法是从内存中读取它。压缩文件包含6个CSV文件,我需要将其读取到CSVReader中。
//part of the code
MultipartFormDataRequest multiPartRequest = null;
Hashtable files = multiPartRequest.getFiles();
UploadFile userFile = (UploadFile)files.get("bootstrap_file");
InputStream input = userFile.getInpuStream();
ZipInputStream zin = new ZipInputStream(input);如何将ZipInputStream读取到char[]中,这是为我的CSVReader对象创建CharArrayReader所需的。
CSVReader reader = new CSVReader(CharArrayRead(char[] buf));发布于 2010-11-02 00:06:05
用InputStreamReader包装ZipInputStream以将字节转换为字符;然后调用inputStreamReader.read(char[] buf,int offset,int length)来填充char[]缓冲区,如下所示:
//part of the code
MultipartFormDataRequest multiPartRequest = null;
Hashtable files = multiPartRequest.getFiles();
UploadFile userFile = (UploadFile)files.get("bootstrap_file");
InputStream input = userFile.getInpuStream();
ZipInputStream zin = new ZipInputStream(input);
// wrap the ZipInputStream with an InputStreamReader
InputStreamReader isr = new InputStreamReader(zin);
ZipEntry ze;
// ZipEntry ze gives you access to the filename etc of the entry in the zipfile you are currently handling
while ((ze = zin.getNextEntry()) != null) {
// create a buffer to hold the entire contents of this entry
char[] buf = new char[(int)ze.getSize()];
// read the contents into the buffer
isr.read(buf);
// feed the char[] to CSVReader
CSVReader reader = new CSVReader(CharArrayRead(buf));
}如果您的CharArrayRead实际上是一个java.io.CharArrayReader,那么就不需要将其加载到char[]中,最好使用下面这样的代码:
InputStreamReader isr = new InputStreamReader(zin);
BufferedReader br = new BufferedReader(isr);
ZipEntry ze;
while ((ze = zin.getNextEntry()) != null) {
CSVReader reader = new CSVReader(br);
}如果你只有一个压缩文件(试图绕过1MB的限制),那么这是可行的:
InputStreamReader isr = new InputStreamReader(zin);
zip.getNextEntry();
CSVReader reader = new CSVReader(isr, ...);https://stackoverflow.com/questions/4070446
复制相似问题