gpt4 book ai didi

java - 如何通过桌面使用 Java 代码打开文件扩展名不受支持的文件?

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:03 25 4
gpt4 key购买 nike

我有一个读取文件路径或 URI 并通过桌面启动文件或 URI 的程序。我遇到的问题是不支持的文件扩展名。奇怪的是当它无法打开文件时我得到的错误不是我所期望的。错误显示为

java.io.IOException: Failed to open file:/C:/Users/angel/Desktop/test.test. Error message: Access is denied.

at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:77)
at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:54)
at java.awt.Desktop.open(Desktop.java:272)
at desktopopenfile.DesktopOpenFile.openFile(DesktopOpenFile.java:24)
at desktopopenfile.DesktopOpenFile.main(DesktopOpenFile.java:15)

我认为错误更多的是不支持文件扩展名。我可以验证另一个程序中的文件扩展名,该程序提供了它支持的数据库,但我想知道是否有一种方法允许用户选择一个应用程序来打开一个不受支持的文件。

我理想的解决方案类似于当您尝试在 Windows 中打开不受支持的文件时它会询问您要使用什么程序打开它或搜索网络。如果我使用下面的代码获得该选项,我会很好。我的想法是我希望能够通过 URI 或文件路径打开任何文件类型。目前我的代码适用于 .pdf、.xml、.pptx 和 word 文件。任何建议都会很棒。

 /**
* Checks if a file or URI is included in the message and if so opens it via
* the Desktop
*/
private void checkMessage() {
// check to make sure the data model and time model are set
if (dataModel == null || timeModel == null) {
return;
}

int selectedIndex = jTable.convertRowIndexToModel(jTable.getSelectedRow());
if (selectedIndex != -1) {
IntData intData = dataModel.getData(selectedIndex);
IceData iceData = ((IceData) intData);
if (iceData != null) {
if (iceData.getMessage() != null) {
String message = iceData.getMessage();
if (message != null) {
if (message.contains("file://")) {
String path = message.substring(message.lastIndexOf("/") + 1, message.indexOf(" ", message.lastIndexOf("/")));
openFile(path);
}
else if (message.contains("uri://")) {
try {
URI uri = new URI(message.substring(message.indexOf("/") + 2, message.indexOf(" ", message.lastIndexOf("/"))));
openURI(uri);
}
catch (IOException | URISyntaxException ex) {
Logger.getLogger(IceDataListPanel.class.getName()).log(Level.SEVERE, "Failed to open URI: {0}", ex.getMessage());
}
}
}
}
}
}
}

/**
* Opens the file given the path
*
* @param path to the file
*/
private void openFile(String path) {
try {
File file = new File(path);

if (file.exists()) {
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(file);
}
else {
System.out.println("Awt Desktop is not supported");
}
}
else {
System.out.println("File Does not Exist");
}
}
catch (IOException ex) {
Logger.getLogger(IceDataListPanel.class.getName()).log(Level.SEVERE, "Failed to open file: {0}", ex.getMessage());
}
}

/**
* Opens the URI given the URI
*
* @param path to the file
*/
private void openURI(URI uri) throws IOException {
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().browse(uri);
}
else {
System.out.println("Awt Desktop is not supported");
}
}

最佳答案

我收到要求应用程序的标准操作系统对话框(使用 Java 7 和 Windows 8)。如果访问被拒绝,可能是因为运行 Java 程序的用户无权打开该文件。

enter image description here

测试应用:

public class DesktopOpenFile {
public static void main(String[] args) {
openFile("huhu.orttr");
}

private static void openFile(String path) {
try {
File file = new File(path);

if (file.exists()) {
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(file);
}
else {
System.out.println("Awt Desktop is not supported");
}
}
else {
System.out.println("DesktopOpenFile::openFile: file = " + file.getAbsolutePath() + (file.exists() ? " - exists" : " - does not exist!"));
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}

关于java - 如何通过桌面使用 Java 代码打开文件扩展名不受支持的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com