程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JSP學習筆記(7)-JSP的文件操作,學習筆記-jsp

JSP學習筆記(7)-JSP的文件操作,學習筆記-jsp

編輯:JAVA綜合教程

JSP學習筆記(7)-JSP的文件操作,學習筆記-jsp


1.File類

File對象用來獲取文件本身的一些信息,例如文件所在目錄,文件的長度,文件讀寫權限等,不涉及文件的讀寫操作。

創建一個File對象的構造方法有3個:

File(String filename);//filename是文件名或文件的絕對路徑
File(String directoryPath,String filename);//文件路徑和文件名
File(File f,String filename);

使用第一種構造方法創建File對象時,filename是文件名會被認為與當前應用程序在同一個目錄中。

File類常用方法

public String getName 獲取文件名 public boolean canRead() 判斷文件是否可讀 public boolean canWrite() 判斷文件是否可寫 public boolean exists() 判斷文件是否存在 public long length() 獲取文件的長度(單位是字節) public String getAbsolutePath() 獲取文件的絕對路徑 public String getParent() 獲取文件的父目錄 public boolean isFile() 判斷文件是否是一個正常文件,而不是目錄 public boolean isDirectory() 判斷文件是否是一個目錄 public boolean isHidden() 判斷文件是否是隱藏文件 public long lastModified() 獲取文件最後修改的時間(時間從1970年午夜到文件最後修改時刻的毫秒數)

 

1.1.創建目錄

  • File對象調用public boolean mkdir()創建一個目錄,成功返回true,失敗返回false。

1.2.列出目錄中的文件

  • public String[] list()用字符串形式返回目錄下的全部文件
  • public File[] listFiles()用File對象形式返回目錄下全部文件

1.3.列出指定類型文件

  • public String[] list(FilenameFilter obj)用字符串形式返回目錄下指定類型的所有文件
  • public File[] listFiles(FilenameFilter obj)用File對象返回目錄下指定類型的所有文件

1.4.刪除文件和目錄

  • public boolean delete()可以刪除當前對象代表的文件或目錄;如果是目錄,目錄必為空;成功返回true。

2.讀寫文件的常用流

java.io包提供了大量的流類,其中InputStream、OutputStream、Reader、Writer是最重要的四個抽象類。

InputStream類及其子類對象為字節輸入流;

OutputStream類及其子類對象為字節輸出流;

Reader類及其子類對象為字符輸入流;

Writer類及其子類對象為字符輸出流。

 

使用輸入流的4個步驟:

(1)設定輸入流的源

(2)創建指向源的輸入流

(3)讓輸入流讀取源中的數據

(4)關閉輸入流

 

使用輸出流的4個步驟:

(1)給出輸出流的目的地

(2)創建指向目的地的輸出流

(3)讓輸出流吧數據寫入到目的地

(4)關閉輸出流

2.1.字節輸入流

創建

FileInputStream(String name);
fileInputStream(File file);
//可能出現I/O錯誤
try{
  FileInputStream in=new FileInputStream("hello.txt");//創建指向源的輸入流
}
catch(IOException e){
  System.out.print(e);
}

File f=new File("hello.txt");//指定輸入流的源
try{
  FileInputStream in = new FileInputStream(f);//創建指向源的輸入流
}
catch(IOException e){
  System.out.print(e);
}

讀取字節

字節輸入流的read方法以字節為單位讀取源中的數據。

int read() 讀取單個字節的數據,返回字節值(0~255之間的一個整數),如未讀出字節就返回-1 int read(byte b[]) 讀取b.length個字節到字節數組b中,返回實際讀取的字節數目,如到達文件的末尾,返回-1 int read(byte b[],int off,int len) 讀取len個字節到字節數組b中,並返回實際讀取字節數目,如到達文件末尾,返回-1;off指定b中存放讀取數據的開始位置

關閉流

使用完之後應該關閉流,close()

2.2.字節輸出流

創建

FileOutputStream(String name);
FileOutputStream(File file);
try{
  //創建指向目的地的輸出流
  FileOutputStream out=new FileOutputStream("hello.txt");
}
catch(IOException e){
  System.out.peint(e);
}

或

File f=new File("hello.txt");
try{
  FileOutputStream out=new FileOutputStream(f);
}
catch(IOException e){
  System.out.print(e);
}
具有刷新功能的輸出流
FileOutputStream(String name,boolean append);
FileOutputStream(File file,boolean appemd);

如果參數append取值為true,輸出流不會刷新指向的文件(假設文件已存在),輸出流的write方法將從文件的末尾開始向文件寫入數據;參數append取值false,輸出流將刷新所指向的文件(假設文件已存在)。

寫字節

字節輸出流的write方法以字節單位向目的地寫數據:

void write(int n) 向目的地寫數據 void write(byte b[]) 向目的地寫入單個字節 void write(byte b[],int off,int len) 從給定字節數組中起始於偏移量off處獲取len個字節寫到目的地

關閉流

close();

2.3.字符流

字節流是使用字節讀取數據,不能很好的操作Unicode字符,比如漢字在文件中占兩個字節,如果使用字節流,可能會出現亂碼。這裡我們就要使用字符流了。

FileReader文件字符輸入流:

   FileReader(String filename);

   FileReader(File file);

FileWriter文件字符輸出流:

   FileWriter(String filename);

   FileWriter(File file);

   FileWriter(String filename,boolean append);

   FileWriter(File file,boolean append);

FileReader和FileWriter分別是Reader和Writer的子類。

字符輸入流和輸出流的read和write方法使用字符數組讀寫數據,就是以字符為基本單位處理數據。

2.4.緩沖流

BufferedReader和BufferedWriter類創建的對象稱為緩沖輸入、輸出流,二者增強了讀寫文件的能力。他們的源和目的地必須是字符輸入流和字符輸出流。通過字符輸入流和BufferedReader的配合使用,使用readLine()方法可實現按行讀取數據,字符輸入流原本不能按行讀取數據。

BufferedReader和BufferedWriter的構造方法:

    BufferedReader(Reader in);

    BufferedWriter(Writer out);

FileReader in = new FileReader("hi.txt");
BufferedReader buin = BufferedReader(in);
String strLine = buin.readLine();

FileWriter out = new FileWriter("hi.txt");
BufferedWriter buout = BufferedWriter(out);
buout.write("pinnsvin",3,4);
//向hi.txt中寫入"nsvi"
readLine() 讀取文本行 write(String s,int off,int len) 字符串s從off處開始寫入len個字符 newLine() 向文件中寫入回行符 flush() 刷新緩存 close() 關閉流

 

3.RandomAccessFile類

RandomAccessFile類不是InputStream或OutputStream的子類,習慣上稱RandomAccessFile創建的對象為一個流,它的指向既可以是源也可以是目的地。

對文件進行讀寫操作時,就可以創建一個RandomAccessFile對象。

RandomAccessFile類的構造方法:

  • RandomAccessFile(String name,String mode) 參數name是文件名,給出創建的流的源或目的地,mode文件的訪問權限,取r(只讀)或rw(可讀寫)
  • RandomAccessFile(File file,String mode)參數file是一個File對象,創建對象時應該捕獲IO異常

RandomAccessFile類常用方法

方法名 功能 getFilePointer() 獲取當前流在文件中的讀寫位置 length() 獲取文件的長度 readByte() 從文件讀取一個字節 readDouble() 從文件讀取一個雙精度浮點值(8個字節) readInt() 從文件讀取一個int值(4個字節) readLine() 從文件讀取一個文本行 readUTF() 從文件讀取一個UTF字符串 seek(long a) 定位到當前流距離文件開頭a個字節數的位置 write(byte b[]) 向文件寫入b.length個字節 writeDouble(double v) 向文件寫入一個雙精度浮點值 writeInt(int v) 向文件寫入一個int值 writeUTF(String s) 向文件寫入一個UTF字符串

4.文件上傳

要上傳文件到服務器,JSP頁面必須有File類型的表單,並且表單中必須將ENCTYPE的屬性值設為“multipart/form-data”

<form action="接受文件上傳頁面" method="post" ENCTYPE="multipart/form-data">
    <input type="file" name="test"/>
</form>

JSP引擎可以讓內置對象request調用getInputStream()方法獲取一個輸入流,通過這個輸入流讀入用戶上傳的全部信息。

upload.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<HTML><BODY>
 <P>選擇要上傳的文件:<BR>
   <FORM action="accept.jsp" method="post" ENCTYPE="multipart/form-data">
      <INPUT type=FILE name="boy" size="38">  <BR>
     <INPUT type="submit" name ="g" value="提交">  
 </BODY></HTML>

accept.jsp

<%@ page contentType="text/html;charset=utf-8" %>

<%@ page import ="java.io.*" %>

<HTML><BODY>

<%try{ InputStream in=request.getInputStream();

File f=new File("d:/story","B.txt");

FileOutputStream o=new FileOutputStream(f);

byte b[]=new byte[1000];

int n;

while((n=in.read(b))!=-1)

{o.write(b,0,n); }

o.close();

in.close();

}

catch(IOException ee){}

out.print("文件已上傳"); %> 

</BODY></HTML>

5.文件下載

JSP內置對象response調用getOutputStream()方法可以獲取一個指向用戶的輸出流,服務器將文件寫入這個流,用戶就可以下載這個文件了。當提供下載功能時,應該使用response對象向用戶發送HTTP頭消息,浏覽器就會調用相應的外部程序打開下載的文件。

response調用setHeader方法添加下載頭的格式:

   response.setHeader(“Content-disposition”,”attachment;filename=”下載文件名”);

download.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<HTML>
<BODY>
<P>點擊超鏈接下載Zip文檔book.Zip
 <BR>  <A href="loadFile.jsp">下載book.zip
</Body>
</HTML>

loadFile.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*" %>
<HTML>
<BODY>
<% //獲得響應客戶的輸出流:
    OutputStream o=response.getOutputStream();
   //輸出文件用的字節數組,每次發送500個字節到輸出流:
   byte b[]=new byte[500];
//下載的文件:
    File fileLoad=new File("d:/story","book.zip");
   //客戶使用保存文件的對話框:
   response.setHeader("Content-disposition","attachment;filename="+"book.zip"); 
//通知客戶文件的MIME類型:
    response.setContentType("application/x-tar");
   //通知客戶文件的長度:
    long fileLength=fileLoad.length();
    String length=String.valueOf(fileLength);
    response.setHeader("Content_Length",length);
   //讀取文件book.zip,並發送給客戶下載:
   FileInputStream in=new FileInputStream(fileLoad);
   int n=0;
   while((n=in.read(b))!=-1)
      { o.write(b,0,n);
      }
%>
</BODY></HTML>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved