2011年1月14日 星期五

JSP 教學 - 檔案讀取與寫入

測試目標:能在網頁上讀取檔案,並且能修改檔案內容,

注意  以下範例是針對一個放在根目錄下的檔案進行測試

首先先來看看網頁如何呈現,那以下我分兩種來說明ㄧ個是針對字串依個是針對二元碼作處理

在JSP中寫入一些 scriptlets

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
//省略 HTML....
<%
     //透過 application 隱含物件 取得真實路徑
  String path = application.getRealPath("simple.txt");  
  java.io.BufferedInputStream bi = new java.io.BufferedInputStream(new java.io.FileInputStream(path));
  byte[] b = new byte[1024];  //1KB
  int num = 0;
  while((num = bi.read(b)) != -1){
  String str = new String(b);  //轉成字串
  str = str.replaceAll("\n", "<br />");  //替換所有的換行字元 成 "<br />" 
  out.print(str);
     }


     /*以下註解的地方為使用純文字處理的方式*/
  /*java.io.BufferedReader br = new java.io.BufferedReader(new 
                                         java.io.FileReader(path));
  String r = "";
  while((r = br.readLine()) != null){
  out.println("<p>" + r + "</p>");
  }*/
%>


接著可以以一個 form 表單讓使用者輸入欲加入的檔案內容


<form action="/test/addInFile.do" method="post">
<textarea name='inut' rows='5' cols='50' ></textarea>
<input type="submit" value="送出" />
</form>


以下為進行處理得 servlet > addInFile.java

package fsc.controller;
import java.io.BufferedWriter;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class checkLogin extends HttpServlet {
    public checkLogin() {
        super();
        
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType( "text/html;charset=UTF-8 ");
        java.io.PrintWriter out = response.getWriter();
        String intpuText = request.getParameter("inut");
        //以下以二元處理寫入
        try{
             String path = getServletContext().getRealPath("simple.txt");
             BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream(path, true));
             byte[] b = intpuText.getBytes();  //將字串轉成二元陣列
             bw.write(b);
             bw.close();
        }catch(IOException e){}

        //以下為純文字處理檔案寫入
        /*try{
              String path = getServletContext().getRealPath("simple.txt");
              BufferedWriter bw = new BufferedWriter(new FileWriter(path, true));
              bw.newLine();
              bw.close();
        }catch(IOException e){}*/
 
        request.getRequestDispatcher("finish.jsp").forward(request, response);
    }

}


最後在 finish.jsp 觀看結果, 程式撰寫跟前面介紹的大致相同

最後提醒以上案例是以根目錄下的檔案進行,如果是本機別的地方如C槽

那就直接使用 File 吧

如果遇到亂碼問題可以試試先將原文轉成 ISO-8859-1,在案指定編碼轉成 String

沒有留言:

張貼留言