Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描仪和多线程问题?_Java_Multithreading_Java.util.scanner - Fatal编程技术网

Java 扫描仪和多线程问题?

Java 扫描仪和多线程问题?,java,multithreading,java.util.scanner,Java,Multithreading,Java.util.scanner,我有以下代码来读取整个文件数据: calling method(String zipFile){ ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile)); //get the zipped file list entry ZipEntry ze = zis.getNextEntry();

我有以下代码来读取整个文件数据:

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)

我相信行
scan=newscanner(zf.getInputStream(ze))正在产生问题。我从您的代码中了解到,
scan
是一个实例变量,您正在为每个线程分配一个
新的扫描仪。我建议在您的方法中将其作为局部变量。如果我误解了什么,请纠正我

Scanner scan = new Scanner(zf.getInputStream(ze))

在我看来,您要做的是将zip的内容复制到给定的文件夹中

如果您使用Java7+,那么做其实非常简单;此代码用于帮助您完成此工作:

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);
    }
}
publicstaticvoidextractzip(最终字符串zipfile,最终字符串dstdir)
抛出IOException
{
final Map env=Collections.singletonMap(“只读”、“真”);
最终路径=Path.get(zipfile);
final URI=URI.create(“jar:+path.toUri());
试一试(
final FileSystem zipfs=FileSystems.newFileSystem(uri,env);
) {
copyRecursive(zipfs.getPath(“/”),path.get(dstdir),
递归模式。失败(快速);
}
}

我当然可以尝试。是的,这正是问题所在。更糟糕的是,它被声明为static。我认为您是否尝试将zip文件解压缩到某个输出目录?您是否使用Java 7+?