我想提取zip并将其传递给方法

问题描述 投票:-1回答:2

我目前正在处理Java,这是我的代码:

@Override
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = false)
    public void kullaniciSorgulama() 
            ServisBaglanti baglanti = servisBaglantiService.getServisBaglanti(ServisEnum.EFATURA_KULLANICI_SORGULAMA, TTSKurumEnum.DOC1);
            String url1 = baglanti.getServisAdresi();
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            URL url = new URL(null, url1, new sun.net.www.protocol.https.Handler());
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
            InputStream  inputStream = con.getInputStream();    
            .............
            //CODE HERE 
            ...............
            Document doc = docBuilder.parse(//THE VARIABLE INSIDE THE CODE WHICH IS AN INSTANCE OF INPUT STREAM);
}   

这里要做的是建立的连接中包含一个zip文件。我想在CODE HERE部分中做的是,要获取此zip文件,将其解压缩,然后以某种方式将该文件转换为InputStream的实例,以传递函数docBuilder.parse()。但我不想将zip文件(或解压缩)保存在任何地方。请问你能帮帮我吗?感谢您的关注。

java inputstream backend
2个回答
0
投票

实际上看不到任何问题。只需使用默认的Java库java.util.zip

ZipInputStream stream = new ZipInputStream(new FileInputStream("yourFile.zip"));您将得到ZipInputStream,那么您需要通过调用stream.getNextEntry();那么您可以使用例如Scanner

收集条目
  Scanner sc = new Scanner(stream);
    StringBuilder sb = new StringBuilder();
    while (sc.hasNextLine()) {
        sb.append(sc.nextLine());
    }

整个代码:

public String readZip() {
        ZipInputStream stream = new ZipInputStream(new FileInputStream("yourFile.zip"));
        stream.getNextEntry();
        Scanner sc = new Scanner(stream);
        StringBuilder sb = new StringBuilder();
        while (sc.hasNextLine()) {
            sb.append(sc.nextLine());
        }
        return sb.toString();
    }

0
投票

您可能会传递inputStream本身,但是我想您想解析一个特定的压缩文件。为此,从zipInputStream创建inputStream。将指针移至要解析的文件(ZipEntry),然后调用docBuilder.parse(inputStream)

ZipInputStream zipInputStream = ZipInputStream(inputStream);

完整代码

@Override
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = false)
    public void kullaniciSorgulama() 
            ServisBaglanti baglanti = servisBaglantiService.getServisBaglanti(ServisEnum.EFATURA_KULLANICI_SORGULAMA, TTSKurumEnum.DOC1);
            String url1 = baglanti.getServisAdresi();
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            URL url = new URL(null, url1, new sun.net.www.protocol.https.Handler());
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
            InputStream  inputStream = con.getInputStream();    

            ZipInputStream zipInputStream = new ZipInputStream(inputStream);
            ZipEntry nextEntry = zipInputStream.getNextEntry();
            while (nextEntry != null) {
              if(nextEntry.getName().equals("file you want to parse"))
                break;
              nextEntry = zipInputStream.getNextEntry();
            }

            Document doc = docBuilder.parse(inputStream);
}   

请把file you want to parse替换为您要解析的文件

© www.soinside.com 2019 - 2024. All rights reserved.