首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Applet 讀取伺服器文件內容的正確姿勢

     編輯:Java 程式設計入門

在 Java Applet 開發中,因安全機制限制,Applet 無法直接對本地文件系統進行讀寫操作。雖然在開發環境(如 Cafe)中調試時文件操作代碼能正常運行,但一旦部署到瀏覽器中,便會拋出安全異常。那麼,當我們確實需要在 Applet 中顯示伺服器上的文本文件(如 .txt)內容時,該如何破解?

核心思路:將文件視為網絡資源

關鍵在於不將伺服器文件作為普通文件處理,而是將其作為網絡資源通過 HTTP 協議獲取。Java 提供了兩個核心類來實現此功能:java.net.URL 和 java.net.URLConnection。兩者均支持以字節流方式讀取資源,並能判斷資源類型以便後續處理。不同之處在於 URLConnection 提供更豐富的元數據,如資源長度、最後修改時間、編碼格式、Content-Type 等。

常用 API 速查

URL 類

  • URL(String protocol, String host, int port, String file):構造完整 URL 對象
  • URL(String protocol, String host, String file):使用預設端口構造
  • URL(String spec):從字符串解析構造
  • URL(URL context, String spec):基於基礎 URL 與相對路徑構造
  • Object getContent():直接獲取資源內容對象
  • InputStream openStream():獲取輸入流讀取數據
  • URLConnection openConnection():建立連接對象以獲取更多控制權

URLConnection 類

  • protected URLConnection(URL url):構造方法(通常由 URL.openConnection() 調用)
  • Object getContent():獲取資源內容
  • InputStream getInputStream():獲取字節輸入流
  • static String guessContentTypeFromStream(InputStream is):根據流推測 MIME 類型

實戰範例:讀取伺服器文本文件

假設伺服器 IP 為 202.114.1.16,文件路徑為 /file/sample.txt。以下是完整的 Applet 實現代碼:

HTML 引用頁面 (getfile.html)

<HTML>
<HEAD><TITLE>讀取伺服器文本文件的 Applet</TITLE></HEAD>
<BODY>
這是伺服器上 TXT 文件的內容<BR>
<Applet code="getFile.class" width=200 height=100>
</Applet>
</BODY>
</HTML>

Applet 源碼 (getFile.java)

import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;

public class getFile extends Applet {
    String info;

    public void init() {
        URL url;
        URLConnection urlc;

        resize(200, 100);
        setBackground(Color.white);

        try {
            url = new URL("https://202.114.1.16/file/sample.txt");
            urlc = url.openConnection();
            urlc.connect();
            info = getInfo(urlc);
        } catch (MalformedURLException mfe) {
            System.out.println("URL 格式錯誤!");
        } catch (IOException ioe) {
            System.out.println("IO 異常!");
        }
    }

    // 輔助方法:從連接讀取文本內容
    private String getInfo(URLConnection conn) throws IOException {
        StringBuilder sb = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()))) {
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
        }
        return sb.toString();
    }

    public void paint(Graphics g) {
        if (info != null) {
            g.drawString(info, 10, 30);
        }
    }
}

關鍵點總結

  1. 繞過沙箱限制:通過 HTTP 協議訪問伺服器資源,而非本地文件系統 API。
  2. 優先使用 URLConnection:需獲取響應頭、設置請求屬性或處理重定向時,URLConnection 更靈活。
  3. 異常處理不可少:網絡操作必須捕獲 MalformedURLException 和 IOException。
  4. 編碼注意:讀取文本時建議顯式指定 InputStreamReader 的字符集(如 UTF-8),避免亂碼。

掌握此技巧,即可在 Applet 安全模型下優雅地實現伺服器文件內容的動態加載與展示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved