如何使用JavaFX WebView打开本地文本文件

时间:2015-07-02 07:03:29

标签: java webview javafx-2

是否可以使用JavaFX WebView打开本地文本文件?我尝试了以下代码,但它无法正常工作。我怎样才能启用此功能?谢谢。

   WebView wv = new WebView();
    wv.getEngine().setCreatePopupHandler(new Callback<PopupFeatures, WebEngine>() {

        @Override
        public WebEngine call(PopupFeatures p) {
            Stage stage = new Stage(StageStyle.UTILITY);
            WebView wv2 = new WebView();
            stage.setScene(new Scene(wv2));
            stage.show();
            return wv2.getEngine();
        }
    });

    wv.getEngine().loadContent("<a href="file:///C:\Users\Dev\infor.txt">Open File</a>");

    StackPane root = new StackPane();
    root.getChildren().add(wv);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show(); 

1 个答案:

答案 0 :(得分:2)

是的,您可以使用JavaFX WebView打开本地文本文件。

示例应用:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewWithLocalText extends Application {

    @Override
    public void start(Stage stage) throws MalformedURLException {
        String location =
                new File(
                        System.getProperty("user.dir") + File.separator + "test.txt"
                ).toURI().toURL().toExternalForm();

        System.out.println(location);

        WebView webView = new WebView();
        webView.getEngine().load(location);

        // use loadContent instead of load if you want a link to a file.
        // webView.getEngine().loadContent(
        //     "<a href=\"" + location + "\">Open File</a>"
        // );

        Scene scene = new Scene(webView);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在运行程序时,将文本文件放在System.out报告的位置。

示例输出:

output

您提供的代码中的一些错误:

  1. 你不能逃避引用。
  2. 您没有提供有效的文件URI,而是提供以文件协议为前缀的Windows路径。
  3. 您对路径和驱动器说明符进行硬编码,这可能不是系统之间的可移植解决方案。
  4. 我没有可以测试的Windows机器,但也许这样的东西适用于你的绝对路径。

    wv.getEngine().loadContent("<a href=\"file:///C:/Users/Dev/infor.txt\">Open File</a>");
    

    另见: