io流技術java_技術文章-java中的IO流

1.File類

Java中對文件有操作時,可以實例化一個File對象,將文件路徑利用這樣的形式賦給File對象。

File f = new File(filePath);

File類的基本操作包括:

判斷是否存在:f.exists()

獲取文件名:f.getName()

獲取其絕對路徑:f.getAbsolutePath()

但是如果涉及文件的查看與存儲,就要利用IO的輸入和輸出流進行操作。

2.輸入流:

常用的有InputStream類。

對于txt類文件查看的操作如下:

// 創建輸入流

InputStream input = new FileInputStream(file);

// 開辟一塊存儲讀入數據的緩存區域

byte[] contentBytes = new byte[input.available()];

// 讀取所有的字節到緩存中

for (int i = 0; i < contentBytes.length; i++) {

contentBytes[i] = (byte) input.read();

}

// 根據字節數組創建字符串

content = new String(contentBytes);

// 關閉流

input.close();

這樣就將txt文件中的內容通過輸入流存入到名為content的字符串中,可以利用java進行下一步操作。

但是輸入流只解決了查看等問題,如果要利用java改變txt文檔中的內容,并存儲到原來的txt中,就要采用輸出流。

4.輸出流:

常用的有OutputStream類等。

以改變txt文檔中的內容再將其存儲到原來的文檔中為例,步驟參考輸入流如下:

//創建輸出流

OutputStream output = new FileOutputStream(file);

//創建一個用來存儲讀取字符串數據的數組

byte[] contentBytes = new byte[content.getBytes().length];

//將存儲在字符串里的數據存入字節數組

contentBytes = content.replaceAll("\n", "\r\n").getBytes();

//因為OutputStream中的寫出方法只能接收字節類型或者整型數據

output.write(contentBytes);

//刷新輸出流,寫出所有還在緩存中的字節

output.flush();

//關閉流

output.close();

例如如何制作一個文件查找器:

1.設計并制作出一個界面,其中包括最基本的輸入文件路徑框、搜索按鈕、顯示查找到的文件列表框。

2.利用讀取的輸入文件路徑,創建一個File類對象。再創建一個File類型的動態數組,準備將符合對象的所有文件存入其中用來輸出。創建一個數組,將讀取到的f文件對象下所有的文件列表存入其中。

List files = new ArrayList();

File f = new File(filePath);

File[] fl = f.listFiles();

3.將File對象進行判斷是否存在、判斷是文件夾還是文件等操作,如果是文件夾,則將該文件夾再次調用文件查找的方法FileSearch(String filePath)。將讀取到的文件存入files動態數組中。

for (int i = 0; i < fl.length; i++) {

if (fl[i].isDirectory()) {

for (File child1 : FileSearch(fl[i].getAbsolutePath()))

{

files.add(child1);

}

}

}

for

(File child1 : fl) {

files.add(child1);

}

4.在搜索結果框中輸入得到的files動態數組中元素的絕對路徑。

for (File child : FileSearch(fp)) {

if

(flag == false) {

jtextarea.setText(child.getAbsolutePath());

}

}

5.加入文件名搜索功能:

新增一個文本框用來輸入文件名,將得到的文件名與fl中列舉的文件名進行比較,符合要求的才加入到files動態數組中用來顯示。

if (fl[i].getName().contains(fn) &&

!fn.equals("")) {

files.add(fl[i]);

}

6.加入點擊結果列表中的文件就能打開的功能:

1.普通的JTextArea不支持點擊返回點擊選項的功能,所以要利用JList組件。JList中存入的數據為Vector類型,故需要一個Vector動態數組來存儲得到的files動態數組。

Vector list = new

Vector();

for

(File child : FileSearch(fp)) {

list.addElement(child.getAbsolutePath());

}

console.setListData(list);

打開選取的文件:利用監聽器返回得到的顯示在JList上的對象后,新建一個Desktop類用來打開選取的文件。使用open(文件名)的方法打開。

Desktop op = new Desktop();

op.open(filepath);

7.序列化與反序列化

什么是序列化?

一個對象產生之后實際上是在內存上開辟一個存儲空間,方便存儲信息。對象序列化,就是把對象變成二進制數據流的一種方法,方便保存和傳輸。

一個對象想被序列化,就需要繼承Serialiazable接口。

Serialiazable接口沒有任何方法,此接口是一個標識接口,標識具有某種能力。例如一個Person類的序列化標識:

import java.io.Serializable ;

public class Person implements

Serializable{

private static final long serialVersionUID

= 1L;?????? //版本聲明

private

String name ;????? // 聲明name屬性,但是此屬性不被序列化

private

int age ;?????????????? // 聲明age屬性

public

Person(String name,int age){?????? // 通過構造設置內容

this.name

= name ;

this.age

= age ;

}

public

String toString(){? // 覆寫toString()方法

return

"姓名:" + this.name + ";年齡:" + this.age

;

}

};

以后此對象就能被序列化為二進制的btye流。

ObjectOutputStream序列化對象

傳入輸出對象:ObjectOutputStream(ObjectStream o)

輸出對象:writeObject(Object o)

public class SerDemo01{

public

static void main(String args[]) throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;??????? // 定義保存路徑

ObjectOutputStream

oos = null ;??? // 聲明對象輸出流

OutputStream

out = new FileOutputStream(f) ;??? // 文件輸出流

oos

= new ObjectOutputStream(out) ;

oos.writeObject(new

Person("張三",30)) ;???? // 保存對象

oos.close()

;???? // 關閉

}

};

ObjectInputStream反序列化對象

構造輸入對象:ObjectInputStream(ObjectStream o)

從指定位置讀取對象:readObject()

public class SerDemo02{

public

static void main(String args[]) throws Exception {

File

f = new File(“地址”) ;?????? // 定義保存路徑

ObjectInputStream

ois = null ;??????? // 聲明對象輸入流

InputStream

input = new FileInputStream(f) ;??????? //

文件輸入流

ois

= new ObjectInputStream(input) ;??? // 實例化對象輸入流

Object

obj = ois.readObject() ;??????? // 讀取對象

ois.close()

;????? // 關閉

System.out.println(obj)

;

}

};

序列化一組對象最好使用數組接收

public class SerDemo05{

public

static void main(String args[]) throws Exception{

Person

per[] = {new Person("張三",30),new Person("李四",31),

new

Person("王五",32)} ;

ser(per)

;

Object

o[] = (Object[])dser() ;

for(int

i=0;i

Person

p = (Person)o[i] ;

System.out.println(p)

;

}

}

public

static void ser(Object obj[]) throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;??????? // 定義保存路徑

ObjectOutputStream

oos = null ;??? // 聲明對象輸出流

OutputStream

out = new FileOutputStream(f) ;??? // 文件輸出流

oos

= new ObjectOutputStream(out) ;

oos.writeObject(obj)

;???? // 保存對象

oos.close()

;???? // 關閉

}

public

static Object[] dser() throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;??????? // 定義保存路徑

ObjectInputStream

ois = null ;??????? // 聲明對象輸入流

InputStream

input = new FileInputStream(f) ;??????? //

文件輸入流

ois

= new ObjectInputStream(input) ;??? // 實例化對象輸入流

Object

obj[] = (Object[])ois.readObject() ;????? //

讀取對象

ois.close()

;????? // 關閉

return

obj ;

}

};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259600.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bootstrap-代碼-內聯代碼

說明通過 <code> 標簽包裹內聯樣式的代碼片段示例<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"view…

java類似php魔術方法_PHP與類有關的幾個魔術方法

與類有關的其他魔術方法序列化與反序列化技術含義&#xff1a;序列化&#xff1a;就是將一個變量所代表的“內存”數據&#xff0c;轉換為“字符串”形式并持久保存在硬盤上的一種做法。反序列化&#xff1a;就是將序列化之后保存在硬盤上的“字符串數據”&#xff0c;恢復為其…

IIS ARR設置HTTP跳轉到HTTPS

GUI Version - Select the website you wish to configure- In the “Features View” panel, double click URL Rewrite You will notice there are currently no rules configured for this site. Click “Add Rules…” in the Actions menu to the right of the “Features…

2013.7.15DAY2

今天自己做了炸土豆 吼吼~ 才知道雞蛋和小麥粉一起弄成漿糊涂到土豆條上炸效果很好~不過做失敗了一些啦 失敗的就用青椒炒著吃。。。。 下午準備做冰品來著。。。結果快遞都到了特別忙。。。就只弄了杯冰啤酒。。。 虐了兩道水題&#xff0c;貼上代碼。。過于水了。。。 Descri…

AutoCAD.NET API 最新(2012)教程下載及在線視頻教程DevTV

Autodek最近發布了基于最新版的AutoCAD 2012的.net API開發教程。基本內容包括&#xff1a; Overview of .NETPlugin BasicsUser InteractionDatabase fundamentalsDictionariesUser InterfaceEventsInputPoint MonitorJigs現在就可以從AutoCAD開發者中心下載&#xff0c; 看圖…

inherits java_JAVA內部類和組合的區別

Why inner classes?At this point you’ve seen a lot of syntax and semantics describing the way inner classes work, but this doesn’t answer the question of why they exist. Why did Sun go to so much trouble to add this fundamental language feature? Feedbac…

SQL Server里一些未公開的擴展存儲過程

SQL Server里一些未公開的擴展存儲過程 [轉帖] 博客天地 www.inbaidu.comSQL Server里一些未公開的擴展存儲過程 擴展存儲過程&#xff08;xp&#xff09;是直接運行在SQL Server地址空間里的動態鏈接庫&#xff0c;是通過使用SQL Server開放數據服務API&#xff08;SQL Server…

Linux技巧:一次刪除一百萬個文件最快方法

昨天&#xff0c;我看到一個非常有趣的刪除一個目錄下的海量文件的方法。這個方法來自http://www.quora.com/How-can-someone-rapidly-delete-400-000-files里的Zhenyu Lee。 他沒有使用find 或 xargs&#xff0c;他很有創意的利用了rsync的強大功能&#xff0c;使用rsync –de…

install python_python install on windows 10

圖 1官網2、下載安裝包&#xff1a;圖 2 Downloads – windows圖 3選擇版本圖 4選擇離線安裝版本圖 5保存下載文件—文件名自己可以修改可能有人看到windows 幾個版本&#xff0c;對幾個版本有迷惑的地方&#xff0c;解釋圖 6幾個版本的差異說明文字解釋&#xff1a;An e…

iOS開發常見錯誤

錯誤1&#xff1a; 1.1這種錯誤都是storyboard有問題 解決&#xff1a;當前storyboard的Custom Class是MJViewController&#xff0c;代碼中MJViewController繼承自UITableViewController。 而storyboard目前提供的是UIViewController&#xff0c;并沒有為MJViewController提供…

windows bat 批處理 !vm 合并快播文件

今天簡單的寫了一個bat批處理文件 用來處理快播的p2p的文件&#xff0c;一般回事這樣的目錄 你可以下載如下代碼 echo off for /r %%a in (.) do (echo %%acd %%acopy /b *.!mv test.rmvb ) pause保存為merge.bat&#xff0c;就可以執行了 代碼解釋&#xff1a; 掃描該目錄下的…

sso接口的調用

之前一直想sso接口已經寫好了&#xff0c;登錄注冊功能是怎么調用的呢&#xff1f;原來在登錄注冊的jsp頁面實現的接口的調用&#xff0c;頁面的校驗和驗證功能在jsp頁面即可實現。 注冊頁面&#xff1a; <% page language"java" contentType"text/html; cha…

java js獲取css方法_5種JavaScript和CSS交互的方法

原標題&#xff1a;5種JavaScript和CSS交互的方法隨著瀏覽器不斷的升級改進&#xff0c;CSS和Java之間的界限越來越模糊。本來它們是負責著完全不同的功能&#xff0c;但最終&#xff0c;它們都屬于網頁前端技術&#xff0c;它們需要相互密切的合作。我們的網頁中都有.js文件和…

(轉)Http協議經典詳解

轉自&#xff1a;http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP 是一個屬于應用層的面向對象的協議&#xff0c;由于其簡捷、快速的方式&#xff0c;適用于分布式超媒體信息系統。它于1990…

CentOS 同步時間

來源&#xff1a;http://www.ctusky.com/16/0497/ 用date查看系統當前時間&#xff0c;date -R 可查看時區。 CentOS 同步時間由ntp服務提供&#xff0c;可以用"yum install ntp -y"安裝. 裝完后運行命令 ntpdate cn.pool.ntp.org同步時間&#xff0c;然后hwclock -w…

[逆向][Writeup]ISG2015 flagfinder - .NET程序逆向

這個題目同樣是一道.NET的逆向題&#xff0c;.NET的逆向方法在之前的博文中已經介紹過&#xff0c;這里不做重復的說明。本題的源程序可以在我的github上下載&#xff1a;https://github.com/gsharpsh00ter/reverse 0x01 逆向 flagfinder為.NET編譯的PE文件&#xff0c;用dnSpy…

spring是如何管理 事務的

Spring提供的事務管理可以分為兩類&#xff1a;編程式的和聲明式的。編程式的&#xff0c;比較靈活&#xff0c;但是代碼量大&#xff0c;存在重復的代碼比較多&#xff1b;聲明式的比編程式的更靈活方便。 1、傳統使用JDBC的事務管理 以往使用JDBC進行數據操作&#xff0c;使用…

java 編譯原理 字符串_Java編譯原理(javac)

Java中的編譯分為兩個部分&#xff1a;源碼文件編譯成字節碼文件(前端編譯)字節碼文件被虛擬機加載以后編譯成機器碼(后端編譯)對于開發來說接觸的一般都是第一個步驟也就是源碼編譯成字節碼文件(class文件)&#xff0c;第二個步驟開發幾乎不會接觸&#xff0c;因為這是虛擬機在…

sql2012一段時間無法連接報53錯誤

2019獨角獸企業重金招聘Python工程師標準>>> 解決方案 在sqlserver網絡配置下的msqlserver協議下改將ip3改成如下圖所示 轉載于:https://my.oschina.net/u/2511906/blog/840373

ICE第三篇------一些疑難點

1 間接代理 參考http://blog.sina.com.cn/s/blog_53e8499c0100lkoo.html IceGrid用于支持分布式網絡服務應用&#xff0c;一個IceGrid域由一個注冊表&#xff08;Registry&#xff09;和任何數目的節點(Node)構成。注冊表&#xff08;Registry&#xff09;和節點(Node)一起合作…