java 类持久化_Java 持久化之 -- IO 全面整理(看了绝不后悔)
目錄:
一、java io 概述
什么是IO?
IO包括輸入流和輸出流,輸入流指的是將數(shù)據(jù)以字符或者字節(jié)形式讀取到內(nèi)存 分為字符輸入流和字符輸入流
輸入流指的是從內(nèi)存讀取到外界 ,分為字符輸入流和字節(jié)輸出流
Java IO即Java 輸入輸出系統(tǒng)。不管我們編寫何種應(yīng)用,都難免和各種輸入輸出相關(guān)的媒介打交道,其實和媒介進行IO的過程是十分復(fù)雜的,這要考慮的因素特別多,比如我們要考慮和哪種媒介進行IO(文件、控制臺、網(wǎng)絡(luò)),我們還要考慮具體和它們的通信方式(順序、隨機、二進制、按字符、按字、按行等等)。Java類庫的設(shè)計者通過設(shè)計大量的類來攻克這些難題,這些類就位于java.io包中。
什么是流?
在Java IO中,流是一個核心的概念。流從概念上來說是一個連續(xù)的數(shù)據(jù)流。你既可以從流中讀取數(shù)據(jù),也可以往流中寫數(shù)據(jù)。流與數(shù)據(jù)源或者數(shù)據(jù)流向的媒介相關(guān)聯(lián)。在Java IO中流既可以是字節(jié)流(以字節(jié)為單位進行讀寫),也可以是字符流(以字符為單位進行讀寫)
二、Java IO類庫的框架
2.1 Java IO的類型
雖然java IO類庫龐大,但總體來說其框架還是很清楚的。從是讀媒介還是寫媒介的維度看,Java IO可以分為:
1.?輸入流:InputStream和Reader
2.?輸出流:OutputStream和Writer
而從其處理流的類型的維度上看,Java IO又可以分為:
1.?字節(jié)流:InputStream和OutputStream
2.?字符流:Reader和Writer
01:File
創(chuàng)建文件 ??刪除文件 修改文件 刪除文件信息
02:字節(jié)流InputStream ???????????OutputStream基類(父類)
03:字符流Reader ???????????????Writer
04:緩沖流BufferReader ??????????BufferWriter依賴于Reader ?Writer
05:二進制流DataInputStream ???????DataOutputStream依賴于InputStream OutputStream
06:序例化objectInputStream ?????ObjectOutputStream依賴于InputStream OutputStream
我們的程序需要通過InputStream或Reader從數(shù)據(jù)源讀取數(shù)據(jù),然后用OutputStream或者Writer將數(shù)據(jù)寫入到目標媒介中。其中,InputStream和Reader與數(shù)據(jù)源相關(guān)聯(lián),OutputStream和writer與目標媒介相關(guān)聯(lián)。 以下的圖說明了這一點:
三、Java IO的基本用法
3.1 Java IO :字節(jié)流(字節(jié)流對應(yīng)的類應(yīng)該是InputStream和OutputStream)
例1,用字節(jié)流寫文件
packagecom.dzq;import java.io.*;/*** 字節(jié)流 InputStream OutputStream*/
public classByteDemo {public static voidmain(String[] args) {//創(chuàng)建輸入流和輸出流對象
InputStream inputStream=null;
OutputStream outputStream=null;try{
inputStream=new FileInputStream("e:/aaa.txt");//true代表是否向文件拼接,不能刪除之前的內(nèi)容
outputStream=new FileOutputStream("e:/aaa.txt",true);//向文件寫入內(nèi)容
outputStream.write("54321".getBytes());//read方法0-255,如果流讀到了最后,將返回-1
int num=0;//int -1 字符串 null
while ((num=inputStream.read())!=-1){
System.out.println((char)num);
}
}catch(Exception e) {
e.printStackTrace();
}try{
inputStream.close();
outputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
3.2 Java IO :字符流(字符流對應(yīng)的類應(yīng)該是Reader和Writer)
例3,用字符流寫文件
packagecom.dzq;import java.io.*;/** 字符流 Reader Writer*/
public classCharDemo{public static voidmain(String[] args) {//創(chuàng)建字符流輸出和輸入
Reader reader=null;
Writer writer=null;try{
reader=new FileReader("e:/aaa.txt");
writer=new FileWriter("e:/aaa.txt",true);
writer.write("我愛我家!");
writer.write("我愛我家?");
writer.write("我愛我家!!");
writer.write("我愛我家??");
writer.flush();
writer.write("我愛我家!!!!");
writer.close();//讀取//創(chuàng)建一次性讀取多個字符
char[] bytes =new char[1024];int num=0;
StringBuffer stringBuffer=newStringBuffer();while((num=reader.read(bytes))!=-1){
stringBuffer.append(bytes);
}
System.out.println(bytes);
}catch(Exception e) {
e.printStackTrace();
}finally{try{
writer.close();
reader.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
3.3 Java IO ?:二進制流(DataInputStream DataOutputStream依賴于InputStream和OutputStream)
packagecom.dzq;import java.io.*;/**二進制流 DataInputStream DataOutputStream*/
public classDataDemo {public static voidmain(String[] args) {//創(chuàng)建輸入流和輸出流對象
InputStream inputStream=null;
OutputStream outputStream=null;
DataInputStream dataInputStream=null;
DataOutputStream dataOutputStream=null;try{//獲取輸入流
inputStream=new FileInputStream("e:/aaa.txt");
dataInputStream=new DataInputStream(inputStream);//封裝//獲取輸出流
outputStream=new FileOutputStream("e:/aaa.txt");
dataOutputStream=newDataOutputStream(outputStream);//讀取
int num=0;while ((num=dataInputStream.read())!=-1){
dataOutputStream.write(num);//復(fù)制
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{
dataOutputStream.close();
dataInputStream.close();
outputStream.close();
inputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
3.4 Java IO(緩沖流BufferReader ?BufferWriter依賴于Reader 和Writer)
packagecom.dzq;import java.io.*;/***緩沖流 BufferReader BufferWriter*/
public classBufferDemo {public static voidmain(String[] args) {//創(chuàng)建字符流輸出和輸入
Reader reader = null;
Writer writer= null;
BufferedReader bufferReader=null;
BufferedWriter bufferedWriter=null;try{//寫入
writer=new FileWriter("e:/aaa.txt") ;
bufferedWriter=new BufferedWriter(writer);//封裝
bufferedWriter.write("我愛我家1");
bufferedWriter.write("我愛我家2");
bufferedWriter.write("我愛我家3");
bufferedWriter.newLine();//換行
bufferedWriter.write("我愛我家4");
reader.close();
bufferedWriter.close();//如果不關(guān)閉后兩行出不來//讀取
reader=new FileReader("e:/aaa.txt") ;
bufferReader=new BufferedReader(reader);//封裝//拼接
String line=null;
StringBuffer stringBuffer=newStringBuffer();while((line=bufferReader.readLine())!=null){
stringBuffer.append(line);
}
System.out.println(stringBuffer.toString());
}catch(Exception e) {
e.printStackTrace();
}finally{try{
bufferReader.close();
reader.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
3.5 Java IO序列化和非序列化
User類:
packagecom.cd;importjava.io.Serializable;public class User implementsSerializable{publicString username;publicString password;publicString getUsername() {returnusername;
}public voidsetUsername(String username) {this.username =username;
}publicString getPassword() {returnpassword;
}public voidsetPassword(String password) {this.password =password;
}publicUser(String username, String password) {this.username =username;this.password =password;
}publicUser(){
}
}
各方法:
packagecom.cd;/*** 序列化和非序列化*/
import java.io.*;importjava.util.Scanner;public classObjectDemo {static Scanner input=newScanner(System.in);//創(chuàng)建輸出流和輸入流
static InputStream inputStream=null;static OutputStream outputStream=null;static ObjectInputStream objectInputStream=null;static ObjectOutputStream objectOutputStream=null;public static voidmain(String[] args) {//登錄
Login();//注冊
register();
}//注冊
private static voidregister() {
User user=newUser();
System.out.println("請輸入你的用戶名");
user.setUsername(input.next());
System.out.println("請輸入你的密碼");
user.setPassword(input.next());try{
outputStream=new FileOutputStream("e:/aaa.txt");
objectOutputStream=newObjectOutputStream(outputStream);//把對象輸出到文件中
objectOutputStream.writeObject(user);
}catch(Exception e) {
e.printStackTrace();
}finally{try{
objectOutputStream.close();
outputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}//登錄
private static voidLogin() {try{
inputStream=new FileInputStream("e:/user.txt");
objectInputStream=newObjectInputStream(inputStream);//讀取對象
User user=(User) objectInputStream.readObject();
System.out.println(user);
}catch(Exception e) {
e.printStackTrace();
}finally{try{
objectInputStream.close();
inputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
3.6Java IO :字節(jié)流轉(zhuǎn)換為字符流(InputStreamReader)
public static void convertByteToChar() throwsIOException{
File file= new File( "d:/test.txt");//獲得一個字節(jié)流 InputStream is= new FileInputStream( file);//把字節(jié)流轉(zhuǎn)換為字符流,其實就是把字符流和字節(jié)流組合的結(jié)果。
Reader reader= newInputStreamReader( is);char [] byteArray= new char[( int) file.length()];int size=reader.read( byteArray);
System. out.println("大小:"+size +";內(nèi)容:" +newString(byteArray));
is.close();
reader.close();
}
3.7 File 操作文件
DEMO:
public classFileDemo
{static Scanner input =newScanner(System.in);public static voidmain( String[] args )
{
System.out.println("***********歡迎進入文件操作系統(tǒng)*******************");
System.out.println(" *******************1:創(chuàng)建文件*******************");
System.out.println("*******************2:刪除文件*******************");
System.out.println("*******************3:修改文件*******************");
System.out.println("*******************4:創(chuàng)建文件夾*******************");
System.out.println("*******************5:刪除文件夾*******************");
System.out.println("*******************6:查詢文件夾下所有的列表*******************");int choose =input.nextInt();switch(choose){case 1://創(chuàng)建文件
createNewFile();break;case 2://刪除文件
deleteNewFile();break;case 3://修改文件
updateNewFile();break;case 4://創(chuàng)建文件夾
mkdirs();break;case 5://刪除文件夾
deletemkdirs();break;case 6://查詢文件夾下所有的列表
findFileList();break;
}
}
創(chuàng)建文件
private static voidcreateNewFile()
{
System.out.println("請輸入文件的名稱:(默認為E:/)");
String fileName=input.next();//創(chuàng)建文件
File file=new File("E:/"+fileName);//默認的路徑
if(file.exists()){
System.out.println("該文件已存在!");
}else{try{boolean flag =file.createNewFile();if(flag){
System.out.println("文件夾創(chuàng)建成功");
}else{
System.out.println("文件夾創(chuàng)建失敗");
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
刪除文件
private static voiddeleteNewFile()
{
System.out.println("請輸入你要刪除的文件名稱:(默認為E:/)");
String fileName=input.next();//創(chuàng)建File對象
File file =new File("E:/"+fileName);if(file.exists()){boolean flag =file.delete();if(flag)
{
System.out.println("刪除成功");
}else{
System.out.println("刪除失敗");
}
}else{
System.out.println("該文件不存在");
}
}
修改文件
private static voidupdateNewFile()
{
System.out.println("請你輸入需要修改的文件的名稱:(默認為E:/)");
String oldFileName=input.next();
System.out.println("請你輸入文件的新名稱:(默認為E:/)");
String newFileName=input.next();//創(chuàng)建File對象
File oldFile=new File("E:/"+oldFileName);
File NewFile=new File("E:/"+newFileName);if(oldFile.renameTo(NewFile)){
System.out.println("修改成功");
}else{
System.out.println("修改失敗");
}
}
創(chuàng)建文件夾
private static voidmkdirs() {
System.out.println("請輸入你要創(chuàng)建的文件名稱:(默認為E:/)");
String fileName=input.next();//創(chuàng)建File對象
File file =new File("E:/"+fileName);if(file.mkdirs()){
System.out.println("創(chuàng)建成功");
}else{
System.out.println("創(chuàng)建失敗");
}
}
刪除文件夾
一:刪除文件夾的方法(先刪除文件夾里面的東西在刪除文件)
public static voiddelFolder(String folderPath) {try{
delAllFile(folderPath);//刪除完里面所有內(nèi)容
String filePath =folderPath;
filePath=filePath.toString();
java.io.File myFilePath= newjava.io.File(filePath);
myFilePath.delete();//刪除空文件夾
} catch(Exception e) {
e.printStackTrace();
}
}
二:刪除文件夾的方法
public static booleandelAllFile(String path) {boolean flag = false;
File file= newFile(path);if (!file.exists()) {returnflag;
}if (!file.isDirectory()) {returnflag;
}
String[] tempList=file.list();
File temp= null;for (int i = 0; i < tempList.length; i++) {if(path.endsWith(File.separator)) {
temp= new File(path +tempList[i]);
}else{
temp= new File(path + File.separator +tempList[i]);
}if(temp.isFile()) {
temp.delete();
}if(temp.isDirectory()) {
delAllFile(path+ tempList[i]);//先刪除文件夾里面的文件
delFolder(path + tempList[i]);//再刪除空文件夾
flag = true;
}
}returnflag;
}
三:刪除文件夾的終極方法
private static voiddeletemkdirs() {
System.out.println("請輸入你要刪除的文件夾名稱:(默認為E:/)");
String fileName=input.next();//創(chuàng)建File對象
File file =new File("E:/"+fileName);if(file.exists()){boolean flag = delAllFile("E:/qqq");if(flag)
{
System.out.println("刪除失敗");
}else{
file.delete();
System.out.println(" 刪除成功");
}
}else{
System.out.println("該文件不存在");
}
}
總結(jié)
以上是生活随笔為你收集整理的java 类持久化_Java 持久化之 -- IO 全面整理(看了绝不后悔)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql+after+commit_S
- 下一篇: java interestops_Jav