目錄:java
IO包括輸入流和輸出流,輸入流指的是將數據以字符或者字節形式讀取到內存 分爲字符輸入流和字符輸入流網絡
輸入流指的是從內存讀取到外界 ,分爲字符輸入流和字節輸出流app
Java IO即Java 輸入輸出系統。無論咱們編寫何種應用,都不免和各類輸入輸出相關的媒介打交道,其實和媒介進行IO的過程是十分複雜的,這要考慮的因素特別多,好比咱們要考慮和哪一種媒介進行IO(文件、控制檯、網絡),咱們還要考慮具體和它們的通訊方式(順序、隨機、二進制、按字符、按字、按行等等)。Java類庫的設計者經過設計大量的類來攻克這些難題,這些類就位於java.io包中。框架
在Java IO中,流是一個核心的概念。流從概念上來講是一個連續的數據流。你既能夠從流中讀取數據,也能夠往流中寫數據。流與數據源或者數據流向的媒介相關聯。在Java IO中流既能夠是字節流(以字節爲單位進行讀寫),也能夠是字符流(以字符爲單位進行讀寫)this
雖然java IO類庫龐大,但整體來講其框架仍是很清楚的。從是讀媒介仍是寫媒介的維度看,Java IO能夠分爲:spa
1. 輸入流:InputStream和Reader操作系統
2. 輸出流:OutputStream和Writer設計
而從其處理流的類型的維度上看,Java IO又能夠分爲:code
1. 字節流:InputStream和OutputStream對象
2. 字符流:Reader和Writer
01:File
建立文件 刪除文件 修改文件 刪除文件信息
02:字節流 InputStream OutputStream 基類(父類)
03:字符流 Reader Writer
04:緩衝流 BufferReader BufferWriter 依賴於 Reader Writer
05:二進制流 DataInputStream DataOutputStream 依賴於InputStream OutputStream
06:序例化 objectInputStream ObjectOutputStream 依賴於InputStream OutputStream
咱們的程序須要經過InputStream或Reader從數據源讀取數據,而後用OutputStream或者Writer將數據寫入到目標媒介中。其中,InputStream和Reader與數據源相關聯,OutputStream和writer與目標媒介相關聯。 如下的圖說明了這一點:
例1,用字節流寫文件
package com.dzq; import java.io.*; /** * 字節流 InputStream OutputStream */ public class ByteDemo { public static void main(String[] args) { //建立輸入流和輸出流對象 InputStream inputStream=null; OutputStream outputStream=null; try { inputStream=new FileInputStream("e:/aaa.txt"); //true表明是否向文件拼接,不能刪除以前的內容 outputStream=new FileOutputStream("e:/aaa.txt",true); //向文件寫入內容 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,用字符流寫文件
package com.dzq; import java.io.*; /* * 字符流 Reader Writer */ public class CharDemo{ public static void main(String[] args) { //建立字符流輸出和輸入 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(); //讀取 //建立一次性讀取多個字符 char[] bytes =new char[1024]; int num=0; StringBuffer stringBuffer=new StringBuffer(); 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(); } } } }
package com.dzq; import java.io.*; /* *二進制流 DataInputStream DataOutputStream */ public class DataDemo { public static void main(String[] args) { //建立輸入流和輸出流對象 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=new DataOutputStream(outputStream); //讀取 int num=0; while ((num=dataInputStream.read())!=-1){ dataOutputStream.write(num);//複製 } } catch (Exception e) { e.printStackTrace(); }finally { try { dataOutputStream.close(); dataInputStream.close(); outputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package com.dzq; import java.io.*; /** *緩衝流 BufferReader BufferWriter */ public class BufferDemo { public static void main(String[] args) { //建立字符流輸出和輸入 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();//若是不關閉後兩行出不來 //讀取 reader=new FileReader("e:/aaa.txt") ; bufferReader=new BufferedReader(reader);//封裝 //拼接 String line=null; StringBuffer stringBuffer=new StringBuffer(); 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(); } } } }
package com.cd; import java.io.Serializable; public class User implements Serializable{ public String username; public String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(String username, String password) { this.username = username; this.password = password; } public User(){ } }
package com.cd; /** * 序列化和非序列化 */ import java.io.*; import java.util.Scanner; public class ObjectDemo { static Scanner input=new Scanner(System.in); //建立輸出流和輸入流 static InputStream inputStream=null; static OutputStream outputStream=null; static ObjectInputStream objectInputStream=null; static ObjectOutputStream objectOutputStream=null; public static void main(String[] args) { //登陸 Login(); //註冊 register(); } //註冊 private static void register() { User user =new User(); System.out.println("請輸入你的用戶名"); user.setUsername(input.next()); System.out.println("請輸入你的密碼"); user.setPassword(input.next()); try { outputStream=new FileOutputStream("e:/aaa.txt"); objectOutputStream=new ObjectOutputStream(outputStream); //把對象輸出到文件中 objectOutputStream.writeObject(user); } catch (Exception e) { e.printStackTrace(); }finally { try { objectOutputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } //登陸 private static void Login() { try { inputStream=new FileInputStream("e:/user.txt"); objectInputStream=new ObjectInputStream(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(); } } } }
public static void convertByteToChar() throws IOException{ File file= new File( "d:/test.txt"); //得到一個字節流 InputStream is= new FileInputStream( file); //把字節流轉換爲字符流,其實就是把字符流和字節流組合的結果。 Reader reader= new InputStreamReader( is); char [] byteArray= new char[( int) file.length()]; int size= reader.read( byteArray); System. out.println( "大小:"+size +";內容:" +new String(byteArray)); is.close(); reader.close(); }
DEMO:
public class FileDemo { static Scanner input =new Scanner(System.in); public static void main( String[] args ) { System.out.println( "***********歡迎進入文件操做系統*******************" ); System.out.println(" *******************1:建立文件*******************" ); System.out.println( "*******************2:刪除文件*******************" ); System.out.println( "*******************3:修改文件*******************" ); System.out.println( "*******************4:建立文件夾*******************" ); System.out.println( "*******************5:刪除文件夾*******************" ); System.out.println( "*******************6:查詢文件夾下全部的列表*******************" ); int choose =input.nextInt(); switch(choose){ case 1://建立文件 createNewFile(); break; case 2://刪除文件 deleteNewFile(); break; case 3://修改文件 updateNewFile(); break; case 4://建立文件夾 mkdirs(); break; case 5://刪除文件夾 deletemkdirs(); break; case 6://查詢文件夾下全部的列表 findFileList(); break; } }
private static void createNewFile() { System.out.println("請輸入文件的名稱:(默認爲E:/)"); String fileName=input.next(); //建立文件 File file=new File("E:/"+fileName);//默認的路徑 if(file.exists()){ System.out.println("該文件已存在!"); }else{ try { boolean flag =file.createNewFile(); if(flag){ System.out.println("文件夾建立成功"); }else{ System.out.println("文件夾建立失敗"); } } catch (IOException e) { e.printStackTrace(); } } }
private static void deleteNewFile() { System.out.println("請輸入你要刪除的文件名稱:(默認爲E:/)"); String fileName=input.next(); //建立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 void updateNewFile() { System.out.println("請你輸入須要修改的文件的名稱:(默認爲E:/)"); String oldFileName=input.next(); System.out.println("請你輸入文件的新名稱:(默認爲E:/)"); String newFileName=input.next(); //建立File對象 File oldFile=new File("E:/"+oldFileName); File NewFile=new File("E:/"+newFileName); if(oldFile.renameTo(NewFile)){ System.out.println("修改爲功"); }else{ System.out.println("修改失敗"); } }
private static void mkdirs() { System.out.println("請輸入你要建立的文件名稱:(默認爲E:/)"); String fileName=input.next(); //建立File對象 File file =new File("E:/"+fileName); if (file.mkdirs()){ System.out.println("建立成功"); }else{ System.out.println("建立失敗"); } }
public static void delFolder(String folderPath) { try { delAllFile(folderPath); //刪除完裏面全部內容 String filePath = folderPath; filePath = filePath.toString(); java.io.File myFilePath = new java.io.File(filePath); myFilePath.delete(); //刪除空文件夾 } catch (Exception e) { e.printStackTrace(); } }
public static boolean delAllFile(String path) { boolean flag = false; File file = new File(path); if (!file.exists()) { return flag; } if (!file.isDirectory()) { return flag; } 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; } } return flag; }
private static void deletemkdirs() { System.out.println("請輸入你要刪除的文件夾名稱:(默認爲E:/)"); String fileName=input.next(); //建立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("該文件不存在"); } }