我目前正在处理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库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();
}
您可能会传递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
替换为您要解析的文件