我有以下代码来读取整个文件数据:
calling method(String zipFile){
ZipInputStream zis =
new ZipInputStream(new FileInputStream(zipFile));
//get the zipped file list entry
ZipEntry ze = zis.getNextEntry();
while (ze != null) {
String fileName = ze.getName();
File newFile =
new File(Constants.OUTPUT_FOLDER + File.separator +
fileName);
if (ze.isDirectory()) {
new File(newFile.getParent()).mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
createBlobDomain(zFile,ze);
}
}
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
}
public String method(ZipFile zf, ZipEntry ze){
scan = new Scanner(zf.getInputStream(ze));
if(scan.hasNext())
fullText = scan.useDelimiter("\\A").next();
return fullText;
}
请从编译角度忽略它,因为我删除了一些与此不相关的代码。从webapp作为单个实例运行时,它工作正常。但它我同时从两个不同的浏览器运行它然后我击中异常。请告知可能出现的问题以及解决方法。
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1347)
答案 0 :(得分:3)
我相信行scan = new Scanner(zf.getInputStream(ze));
正在制造问题。我从您的代码中了解到的是scan
是一个实例变量,您为每个线程分配new Scanner
。我建议将它作为方法中的局部变量。纠正我如果我误解了什么。
Scanner scan = new Scanner(zf.getInputStream(ze))
答案 1 :(得分:0)
在我看来,您想要做的是将zip的内容复制到给定的文件夹中。
如果您使用Java 7+,实际上这很简单;此代码使用java7-fs-more来帮助您完成工作:
public static void extractZip(final String zipfile, final String dstdir)
throws IOException
{
final Map<String, ?> env = Collections.singletonMap("readonly", "true);
final Path path = Paths.get(zipfile);
final URI uri = URI.create("jar:" + path.toUri());
try (
final FileSystem zipfs = FileSystems.newFileSystem(uri, env);
) {
MoreFiles.copyRecursive(zipfs.getPath("/"), Paths.get(dstdir),
RecursionMode.FAIL_FAST);
}
}