第39節:Java當中的IO
Java當中的IO
IO
的分類
第一種分:輸入流和輸出流
第二種分:字節流和字符流
第三種分:節點流和處理流
節點流處理數據,處理流是節點流基礎上加工的。
IO
中的重點:
InputStream
OutputStream
FileInputStream
FileOutputStream
InputStream
int read(byte[] b,int off,int len)
OutputStream
void write(byte[] b,int off,int len)
// 第一步,導入類 import java.io.*; class Demo { public static void main(String[] args){ // 聲明輸入流的引用 FileInputStream fis = null; // 聲明輸出流的引用 FileOutputStream fos = null; try{ // 生成輸入流的對象 fis = new FileInputStream("e:/from.txt"); // 生成代表輸出流的對象 fos = new FileOutputSteam("e:/to.txt"); // 生成一個字節數組 byte[] buffer = new byte[100]; // 調用輸入流對象的read方法 int temp = fis.read(buffer,0,buffer.length); fos.write(buffer,0,temp); for(int i=0; i<buffer.length; i++){ System.out.println(buffer[i]); } }catch(Exception e){ System.out.println(e); } } }
IO
是為了對數據進行讀寫操作,數據的流向是以Java
程序為參照物的,註意read
方法和write
方法。
流:在Java
中輸入和輸出是通過流的類來實現的,Java
提供了一套豐富的流類,可導入java.io
,這樣就可以完成輸入和輸出了,也同樣可以實現網絡操作等。
聽到流,是不是很形象了呢?流好比一個走向,當程序中需要讀取數據時,就會開啟一個通向數據源的流,這個數據源可以是文件,內存,網絡連接等,需要寫入數據時,也會開啟一個通向目的地的流。流好比連接起點到終點的路。
輸入流:源到程序,即讀,從數據源的地方輸入到程序中,讀即 一個文件裏的內容讀到程序中。
輸出流:程序中輸出到目的地,輸出流,即寫,一個文件寫到另一個文件,從這邊輸出到另一邊。
在Java
中流:字節流,字符流都要掌握
InputStream
OutputStream
Reader
Writer
重點早期的Java
內容:InputStream
和OutputStream
,這兩個都是基於字節流。
字符流:Reader
和Writer
Java
語言中的流分:文本流(字符序列)和二進制流
輸入流和輸出流
InputStream
類為基本的輸入流類,是抽象的類,在InputStream
類中定義了read
方法,用於讀取數據的,讀的。
OutputStream
類為基本的輸出類,是抽象的類,在OutputStream
類中定義了write
方法,用於輸出數據,寫的。
OutputStream
類
清除緩沖區:public void flush()
關閉輸出流:public void close()
其他重點:
在Java
中提供了DataInputStream
類與DataOutputStream
類,數據輸入流和數據輸出流。在JDK1.1
版本提供了InputStreamReader
類與OutputStreamWriter
類,它們是Reader
、Writer
類的子類,提供了字節流到字符流的轉換。
字符流
BufferedReader
類與BufferedWriter
類分別是Reader
類和Writer
類的子類,輸入和輸出的緩沖區得以提供。
文件類
FileInputStream
類為輸入操作,是文件輸入流類
import java.io.*;
public class Demo{
public static void main(String[] args){
byte buffer[] = new byte[1024];
try{
// 創建FileInputStream類對象
FileInputStream fis = new FileInputStream("from.txt");
int temp = fis.read(buffer,0,buffer.length);
String str=new String(buffer,0,temp);
// 輸出字符串內容
System.out.println(str);
}catch(Exception e){
System.out.println(e);
}
}
}
FileOutputStream
類為輸出類,與FileInputStream
同理即可。
FileInputStream
類,FileOutputStream
類
DataInputStream
類,DataOutputStream
類
InputStream
類,OutputStream
類
BufferedReader
類,BufferedWriter
類
說說IO
//第一種:輸入流輸出流
//第二種:字節流字符流
//第三種:節點流處理流
//FileInputStream
class Test{
public static void main(String args[]){
FileInputStream fis = null;
try{
fis = new FileInputStream("e:/read.txt");
byte[] buffer = new byte[100];
fis.read(buffer,0,buffer.length);
for(int i = 0;i<buffer.length;i++){
System.out.println(buffer[i]);
}
}
catch(Exception e){
System.out.println(e);
}
}
}
class Test{
public static void main(String args[]){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("e:/read.txt");
fos = new FileOutputStream("e:/write.txt");
byte[] buffer = new byte[100];
int temp = fis.read(buffer,0,buffer.length);
fos.write(buffer,0,temp);
}
catch(Exception e){
System.out.println(e);
}
}
}
class Test{
public static void main(String args[]){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("e:/read.txt");
fos = new FileOutputStream("e:/write.txt");
byte[] buffer = new byte[1024];
while(true){
int temp = fis.read(buffer,o,buffer.length);
if(temp = -1){
break;
}
fos.write(buffer,0,temp);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
fis.close();
fos.close();
}catch(Excepiton e){
System.out.println(e);
}
}
}
}
//字符流
public class TextChar
public static void main(String args[]){
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader("e:/read.txt");
fw = new FileWriter("e:/write.txt");
char[] buffer = new char[100];
int temp = fr.read(buffer,0,buffer.length);
fw.write(buffer,0,temp);
}
catch(Exception e){
System.out.println(e);
}finally{
try{
fr.close();
fw.close();
}
catch(Excepiton e){
System.out.println(e);
}
}
}
//FileReader和BufferedReader
class Test{
public static void main(String args[]){
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader("e:/read.txt");
bufferedReader = new BufferedReader(fileReader);
String line = null;
while(true){
line = bufferedReader.readLine();
if(line == null){
break;
}
System.out.println(line);
}
}catch(Exception e){
System.out.println(e);
}
finally{
try{
bufferedReader.close();
fileReader.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
public class Test{
public static void main(String[] args) throws Exception{
//字節流
FileInputStream in = new FileInputStream("c:/read.txt");
FileOutStream out = new FileOutputStream("c:/write.txt");
byte[] buffer = new byte[1024];
int len;
while( (len = in.read(buffer)) != -1){
out.write(buffer,0,len);
}
in.close();
out.close();
//字符流
BufferedReader bf = new BufferedReader(new FileReader("c:/read.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/write.txt");
String str;
while( (str=bf.readLine()) != null ){
bw.write(str);
bw.newLine();
}
bf.close();
bw.close();
}
}
字節流: InputStream
字節輸入流,OutputStream
字節輸出流
字符流 : Reader
字符輸入流 ,Writer
字符輸出流
數據流: DataInputStream
數據輸入流 ,DataOutputStream
數據輸出流
文件讀寫
目的
1 掌握文件讀寫的幾種方法
2 FileOutputStream
和FileInputStream
類的使用。
3 基本數據類型之間的轉換
實現文件讀取後轉換為大寫後寫入到目標文件中,其中src
是指源文件,des
是目標文件目錄。
public class FileDemo {
//創建一個文件夾
public static void createFolder(String path){
File folder=new File(path);
if(folder.exists()){
System.out.println("文件夾已存在!");
}else{
//不存在時去創建
folder.mkdir();
}
}
//創建一個文件
public static void createFile(String path,String filename){
File file=new File(path,filename);
//文件判斷是否已存在
if(file.exists()){
System.out.println("文件已存在!");
System.out.println(file.length());
}else{
try{
file.createNewFile();
}catch(IOException e){
System.out.println("文件創建失敗!");
}
}
}
//寫文件
public static void write(String path,String filename){
try{
String str="0123456789/nac";
String Upstr = str.toUpperCase();//
byte b[]=Upstr.getBytes();//
FileOutputStream fos=new FileOutputStream(new File(path,filename));
fos.write(b);
fos.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
System.out.println("寫文件失敗");
}
}
//讀文件
public static void read(String path,String filename){
try{
int length=0;
String str="";
byte buffer[]=new byte[10];
FileInputStream fis=new FileInputStream(new File(path,filename));
while((length=fis.read(buffer, 0, buffer.length)) !=-1){
str+=new String (buffer, 0, length);
}
System.out.println(str);//
fis.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
e.printStackTrace();
}
}
//
public static void FileReaderCopy(String src,String des){
try{
FileReader fr=new FileReader(src);
FileWriter fw=new FileWriter(des);
char c[]=new char[1024];
int len=0;
while((len=fr.read(c, 0, c.length)) != -1){
fw.write(c, 0, c.length);
}
fw.close();
fr.close();
} catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
System.out.println("讀寫失敗");
}
}
//
public static void BufferedReaderCopy(String src,String des){
try{
BufferedReader br=new BufferedReader(new FileReader(src));
BufferedWriter bw=new BufferedWriter(new FileWriter(des));
String str="";
while((str=br.readLine()) != null){
String Upstr = str.toUpperCase();//加入大寫的變換
bw.write(Upstr);//
bw.newLine();
}
bw.close();
br.close();
} catch(FileNotFoundException e){
System.out.println("文件存在");
}catch(IOException e){
System.out.println("讀寫失敗");
}
}
//復制
public static void copy(String src,String des){
try{
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(des);
int c;
while((c=fis.read()) != -1){
fos.write(c);
}
fos.close();
fis.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
System.out.println("讀寫失敗");
}
}
//復制文件
public static void copy1(String src,String des){
try{
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(des);
int c;
byte buff[]=new byte[1024];
while((c=fis.read(buff,0,buff.length)) != -1){
fos.write(buff,0,c);
}
fos.close();
fis.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
System.out.println("讀寫失敗");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
FileDemo.createFolder("c:/test");
FileDemo.createFile("c:/test", "1.txt");
FileDemo.write("c:/test", "1.txt");
FileDemo.read("c:/test", "1.txt");
FileDemo.read("c:/test", "FileDemo.java");
FileDemo.BufferedReaderCopy("c:/test/FileDemo.java", "c:/test/FileDemo2.java");
FileDemo.copy1("c:/test/1.mp3", "c:/test/2.mp3");
}
}
讀文件
//讀文件
public static void read(String path,String filename){
try{
int length = 0;
String str = "";
byte buffer[]=new byte[10];
FileInputStream fis=new FileInputStream(new File(path,filename));
while((length=fis.read(buffer,0,buffer.length))!=-1){
str+=new String(buffer,0,length);
}
System.out.println(str);
fis.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
e.printStackTrace();
}
}
文件的創建
public class FileDemo{
public static void createFolder(String path){
File folder = new File(path);
if(folder.exists()){
System.out.println("文件已存在!");
}else{
folder.mkdir();
}
}
public static void createFile(String path,String filename){
File file = new File(path,filename);
if(file.exists()){
System.out.println("文件已存在!");
System.out.println(file.length());
}else{
try{
file.createNewFile();
}catch(IOException e){
System.out.println("文件創建失敗");
}
}
}
public static void main(String[] args){
FileDemo.createFolder("c:/test");
FileDemo.createFile("c:/test","1.txt");
}
}
寫文件
public static void write(String path,String filename){
try{
String str = "234455";
byte b[] = str.getBytes();
FileOutputStream fos = new FileOutputStream(new File(path,filename));
fos.write(b);
}catch(FileNotFoundException e){
System.out.println("文件不存在");
}catch(IOException e){
System.out.println("寫文件失敗");
}
}
文件的讀寫
重點:
文件類主要功能:創建,讀屬性,寫屬性,刪除等
文件讀寫操作
File
類
File
類的對象
用來獲取文件本身的信息,如文件所在目錄、文件長度、文件讀寫權限等,不涉及文件的讀寫操作。
構造函數
File(String filename)
File(String directoryPath,String filename)
File(File f,String filename)
獲取文件的屬性
String getName()
boolean canRead()
boolean canWrite()
long length()
boolean isFile()等
目錄操作
boolean mkdir():創建目錄。
String[] list():以字符串的形式返回目錄下所有文件。
File[] listFiles():以File對象形式返回目錄下所有文件。
文件操作
boolean createNewFile():創建一個新的文件。
boolean delete():刪除一個文件
流的概念
Java
輸入輸出功能是借助輸入輸出流類來實現的。
java.io
包中包含大量用來完成輸入輸出流的類。
Java中流的分類:
流的運動方向,可分為輸入流
和輸出流
兩種。
流的數據類型,可以分為字節流
和字符流
。
輸入流類都是抽象類InputStream
(字節輸入流)或抽象類Reader
類(字符輸入流)的子類。
輸出流類都是抽象類OutputStream
(字節輸出流)或抽象類Writer
類(字符輸出流)的子類。
輸入流
輸入流用於讀取數據,用戶可以從輸入流中讀取數據,但不能寫入數據。
輸入流讀取數據過程如下:
(1)打開一個流。
如:FileInputStream
inputFile
=new
FileInputStream
("數據源");
(2)從信息源讀取信息。
如:inputFile.read()
;
(3)關閉流。
如:inputFile.close()
;
輸出流
輸出流用於寫入數據。只能寫,不能讀。
寫數據到輸出流過程如下:
(1)打開一個流。
如:FileOutputStream
outFile
=new
FileOutputStream
("數據源");
(2)寫入信息到目的地。
如:outFile.write(inputFile.read())
:
(3)關閉流。如:
如:outFile.close()
;
IO
I/O
操作的目標IO
的分類方法- 讀取文件和寫入文件的方法
I/O操作的目標
目標是從數據源中讀取數據,將數據寫入到數據目的地中。
從一個地方輸入到java
程序中輸出到另外一個地方。
文件與數據流
寫入和讀出數據文件,在Java
的輸入/輸出
操作采用數據流的形式,數據流的兩種形式為16位字符
或8位字節
數據流的操作對象:
數據文件的讀寫
線程間的數據傳輸
網絡間的數據傳播
讀/寫步驟:
導入輸入/輸出包,導入java.io.*
包
創建文件對象
FileReader/FileWriter
類用於文本文件的讀寫操作
DataInputStream
(用於文件讀出)和DataOutputStream
(用於文件寫入)類文件的讀寫
FileInputStream
(用於文件讀出)和FileOutputStream
對象(用於文件寫入)
關閉文件
close
函數關閉文件
File對象的特性
創建文件
boolean createNewFile();
創建子目錄
boolean mkdir();
boolean mkdirs();
重命名/移動文件
boolean renameTo(File dest);
刪除文件
boolean delete();
檢查文件是否存在
boolean exists();
檢查是否為文件
boolean isFile();
檢查是否為文件夾
boolean isDirectory();
查詢文件長度
long length();
往後余生,唯獨有你
簡書作者:達叔小生
90後帥氣小夥,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書博客: https://www.jianshu.com/u/c785ece603d1
結語
- 下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關註
- 小禮物走一走 or 點贊
第39節:Java當中的IO