String url = "http://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/Master-DMP-Template.doc";
InputStream inputStream = new URL(urlString).openStream();
HWPFDocument doc = new HWPFDocument(inputStream);
WordExtractor extractor = new WordExtractor(doc);
String text = extractor.getText();
尝试2:有趣的部分是下载文件(只是在浏览器地址栏中粘贴URL),然后执行类似的代码在本地读取文档确实有效:
InputStream inputStream = new FileInputStream("C:\\Users\\me\\Downloads\\Master-DMP-Template (2).doc");
HWPFDocument doc = new HWPFDocument(inputStream);
WordExtractor extractor = new WordExtractor(doc);
System.out.println(extractor.getText());
尝试3:现在是最奇怪的部分。我想文件需要先下载。因此,我首先使用Java下载了它,然后在本地执行前面的代码来读取文档。像第一个案例一样失败!
final String url = "http://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/Master-DMP-Template.doc";
String localPath = FileUtils.downloadFile("C:\\Users\\me\\Downloads", url);
InputStream inputStream = new FileInputStream(localPath);
HWPFDocument doc = new HWPFDocument(inputStream);
WordExtractor extractor = new WordExtractor(doc);
System.out.println(extractor.getText());
public static String downloadFile(String targetDir, String sourceUrl) throws IOException {
sourceUrl = StringUtils.removeEnd(sourceUrl, "/");
String fileName = sourceUrl.substring(sourceUrl.lastIndexOf("/") + 1);
String targetPath = targetDir + FileUtils.SEPARATOR + fileName;
InputStream in = new URL(sourceUrl).openStream();
Files.copy(in, Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);
System.out.println("Downloaded " + sourceUrl + " to " + targetPath);
return targetPath;
}
你知道这是怎么回事吗?
public static void main(String[] args) {
try {
if (args.length > 0 && args[0].equals("disableCertValidation")) {
SSLUtil.disableCertificateValidation(); // redirect is https
}
final String stringURL = "https://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/Master-DMP-Template.doc";
URL url = new URL(stringURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
int responseCode = con.getResponseCode();
System.out.println("Response code: " + responseCode); //301 Moved Permanently
InputStream in = con.getInputStream();
HWPFDocument doc = new HWPFDocument(in);
WordExtractor extractor = new WordExtractor(doc);
String text = extractor.getText();
System.out.println(text);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
int responseCode = con.getResponseCode();
以下异常失败:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:PKIX路径构建失败:sun.security.provider.certPath.SunCertPathBuilderException:找不到请求目标的有效证书路径
当运行带有disableCertificateValidation参数的代码时,响应代码为404,我得到以下异常:
java.io.fileNotFoundException:https://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/master-dmp-template.doc at sun.reflect.nativeconstructoraccessorimpl.newinstance0(原生方法)at sun.reflect.nativeconstructoraccessorimpl.newinstance0(原生方法)at sun.reflect.nativeconstructoraccessorimpl.newinstance(原生方法)at lconnection.java:1890)在sun.net.www.protocol.http.http.httpurlconnection$10.run(httpurlconnection.java:1885)在sun.net.www.protocol.http.http.httpurlconnection.getChainedException(httpurlconnection.java:1885)在sun.net.www.protocol.http.httppurlconnection.getInputStream(httpurlconnection.java:1441)在sun.net.www.protocol.https.httpsurlconnectionimpl.getInputStream(httpsurlconnectionimpl.java:254)在com.keywords.control.util.testhtmlparser.main(Testhtmlparser.java:472)由:java.io.filenotfoundexception:https://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/master-dmp-template.doc在sun.net.www.protocol.https.httpsurlconnectionimpl.getresponseCode(httpsurlconnectionimpl.java:480)在com.keywords.control.util.testhtmlparser.main(Testhtmlparser.java:470)
有什么想法吗?
对URL
的初始HTTP
请求导致一个重定向301永久移动
。所以我们需要处理这个并读取新的位置。
完整示例:
import java.io.InputStream;
import java.net.URL;
import java.net.HttpURLConnection;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
public class OpenHWPFFromURL {
public static void main(String[] args) throws Exception {
String stringURL = "http://prevention.cancer.gov/sites/default/files/uploads/clinical_trial/Master-DMP-Template.doc";
URL url = new URL(stringURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
int responseCode = con.getResponseCode();
System.out.println(responseCode); //301 Moved Permanently
if (responseCode != HttpURLConnection.HTTP_OK) {
if (responseCode == HttpURLConnection.HTTP_MOVED_TEMP
|| responseCode == HttpURLConnection.HTTP_MOVED_PERM
|| responseCode == HttpURLConnection.HTTP_SEE_OTHER) {
url = new URL(con.getHeaderField("Location")); //get new location
con = (HttpURLConnection)url.openConnection();
}
}
InputStream in = con.getInputStream();
HWPFDocument doc = new HWPFDocument(in);
WordExtractor extractor = new WordExtractor(doc);
String text = extractor.getText();
System.out.println(text);
}
}
注意:简单地将httpurlconnection.setfollredirects
设置为true
(也是默认值),如果重定向还更改了协议(例如,从http
设置为https
)的话,将没有帮助。这里的情况也是如此。因此,我们需要手动获取新的位置,如我的代码所示。
我正在编写一个Qt GUI应用程序,它通过串行方式接收数据并将数据发送到Arduino。它写得正确,但当尝试阅读时,它不起作用。 我的问题是: 我有一个Arduino代码可以通过串行方式发送信息,我将其编程为根据接收到的数据打开和关闭针脚13上的LED: 我在MainWindow类中使用以下信号和插槽: 以及前一个插槽调用的Arduino::Read()方法: 当向Arduino写入数据时,它工作
问题内容: 我想读取.bak文件,这些文件是ms sql数据库的备份文件。现在,我正在研究如何使用Sql Mngmnt studio读取这些文件。请帮帮我。谢谢 问题答案: 您可以使用SQL Management Studio将.BAK文件还原到临时数据库并读取它们! 这里的一些指针
我已经按照下面的链接使用spring的Swagger为我的REST服务创建API文档。 http://jakubstas.com/spring-jersey-swagger-configuration/#comment-1726 一切都很顺利,但当我试图使用url http://localhost:8080/rest/api-docs访问swagger的api文档时,我发现无法读取swagger
我正在尝试使用clojure创建一个简单的android应用程序,它可以读取csv文件,并允许用户对数据进行类似正则表达式的搜索。问题是,当我尝试读取数据时,会出现以下异常。 我的研究表明,这通常意味着Clojure正在寻找某样东西,但找不到。但是我不知道它可能是什么或者为什么。 下面是引发异常的Clojure代码: 据我所知,“kamus.csv”在正确的目录中,所以我不认为是这样。如果我在re
我一直在到处寻找答案,但没有任何帮助。 这是我的代码: 当我试图读取URL时,下面出现了一个异常。 任何帮助都会很好。我正在尝试读取url内部的图像,并将其与现有文件进行比较。这里没有任何问题给出答案。 编辑: 我尝试在命令行“keytool-list-keystore keystore”中输入,但它只显示给我TrustedCertentries。还没有解决方案奏效。
bufferedinputstream(BIS)比FileInputStream(FIS)快的原因请参见“为什么使用bufferedinputstream逐字节读取文件比使用FileInputStream快?”?是吗 使用BufferedInputStream,该方法委托给重载read()方法,该方法读取8192个字节,并在FIS读取单个字节时缓冲它们,直到需要它们 据我所知,磁盘是一个“块设备”