java_IO_文件的基本操作

首先明白:程序與流打交道,是以程序爲中心

IO流的分類:

1、流向:輸入流輸出流

2、數據:字節流:二進制,可以處理一切文件,包括純文本、視頻等

                字符流:文本文件,只能處理文本

3、功能:

         節點流:包裹源頭

         處理流:增強功能,提供性能


關於文件處理的字節流和字符流

1、字節流:

輸入流:InputStream   read(byte[] b)  read(byte[] b,int off,int len)  +close()

      FileInputStream()

輸出流:OutputStream write(byte[] b)  write(byte[] b,int off, int len)  +flush()  + close()

              FileOutputStream()

2、字符流:

輸入流:Reader  read(char[] cbuf)  read(char[] cbuf,int off,int len) +close()

              FileReader()

輸出流:Writer write(char[] cbuf)  write(char[] cbuf,int off ,int len)   write(String str, int off, int len)  +flush() +close()

              FileWriter()

3、節點流:

Reader FileReader

Writer FileWriter

4、處理流

(1)字節緩衝流:

BufferedInputStream

BufferedOutputStream

(2)字符緩衝流

BufferedReader  readLine()讀取一個文本行。

BufferedWriter  newLine() 寫入一個行分隔符。

5、轉換流:字節流 轉爲字符流   處理亂碼(編碼集、解碼集),中心是程序

編碼:字符  --------編碼字符集--->二進制

解碼:二進制-------解碼字符集--->字符

1、輸出流  OutputStreamWriter  編碼

2、輸入流 InputStreamReader    解碼

----------------------------------------------------------------------------------------------------

關於處理流的基本寫法:

InputStream is=new BufferedInputStream(new FileInputStream(new File(.....)))

BufferedReader reader=new BufferedReader(new FileReader(new Filer(.......)))



關於轉換流的基本寫法:

//指定解碼字符集,要知道原編碼的字符編碼集,假設原編碼集是“UTF-8”

InputStream is=new BufferedInputStream(new InputStreamReader(new FileInputStream(new File(.....)),"UTF-8"))

以下是File類-------------------------------------------------------------------------------------------------

 File 類    ,實際是一中文件與路徑的聯繫,操作文件使用  IO  流


package com.lucas.testIO;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


/**
 * 讀取文件:
 * 1、建立聯繫,File對象  (源頭)
 * 2、選擇流,文件輸入流 InputStream FileInputStream
 * 3、操作  byte[] b=new byte[1024];  + read + 讀取大小  輸出
 * 4、釋放資源 關閉
 * 
 * 寫出文件
 * 1、建立聯繫,File對象  (目的地)
 * 2、選擇流,文件輸出流 OuputStream FileOuputStream
 * 3、操作  :write() + flush
 * 4、釋放資源 關閉
 * 
 * 拷貝文件
 * 1、建立聯繫,File對象  (源頭   和  目的地)
 * 2、選擇流,
 *          文件輸入流 InputStream FileInputStream
 * 文件輸出流 OuputStream FileOuputStream
 * 3、操作  :拷貝
 *         byte[] b=new byte[1024]; 
 *         int len=0;
 *         while(-1 != (len=輸入流.read(b))){
 *          輸出流.write(b,0,len)
 *         }
 *         輸出流.flush
 * 4、釋放資源 關閉兩個流
 * @author lx
 *
 */
public class Demo5 {


public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String path="H:/java/127.0.0.4/a.txt";
File src=new File(path);

//------------------------------讀取文件--------------
// InputStream is=new FileInputStream(src);
// byte[] b=new byte[1024];//操作不斷讀取緩存數組
// int len=0;  //接收實際讀取的大小
// //循環讀取
// while( -1!=(len = is.read(b))){
// //輸出  字節數組轉成字符串
// String info = new String(b,0,len);
// System.out.println(info);
// }
//
// if(null != is){
// is.close();
// }
//------------------------------寫出文件--------------
// OutputStream os=new FileOutputStream(src,true);//以追加的形式,必須寫成true, 默認爲false
// String str="welcome to beijing";
// byte[] data=str.getBytes();
// os.write(data,0,data.length);
// os.flush();//強制刷新出去
// if(null != os){
// os.close();
// }
//-------------------------------拷貝文件------------------


// 1、建立聯繫  源頭:存在且是文件   目的地:文件可以不存在
File src1=new File("H:/java/127.0.0.4/2.jpg");
File src2=new File("H:/java/127.0.0.4/999.jpg");

//      2、選擇流
InputStream is=new FileInputStream(src1);
OutputStream os=new FileOutputStream(src2);
//     3、文件拷貝  循環 讀取 寫出
byte[] b=new byte[1024];
int len=0;
while(-1 != (len=is.read(b))){
os.write(b, 0, len);
}
os.flush();
if(null != os){
os.close();
}
if(null!= is){
is.close();
}
}



/**
* 文件的拷貝
* @param 源文件路徑
* @param 目的文件路徑
* @return
* @throws Exception 
*/
public static void copyFile(String srcPath,String destPath) throws Exception{
File src1=new File(srcPath);
File src2=new File(destPath);

InputStream is=new FileInputStream(src1);
OutputStream os=new FileOutputStream(src2);
byte[] b=new byte[1024];
int len=0;
while(-1 != (len=is.read(b))){
os.write(b, 0, len);
}
os.flush();
if(null != os){
os.close();
}
if(null!= is){
is.close();
}
}
}


--------------------------------------------------------------------------------------------------------------------------




System.out.println(File.pathSeparator);   //路徑分割符
System.out.println(File.separator);       //文件分隔符


路徑表示方式
String path="H:\\java\\127.0.0.4\\2.jpg";
path="H:"+File.separator+"java"+File.separator+"127.0.0.4"+File.separator+"2.jpg";
推薦使用
path="H:/java/127.0.0.4/2.jpg";

   String path="H:/java/127.0.0.4";
        String name="2.jpg";

根據相對路徑
File file=new File(path,name);
file=new File(new File(path),name);
System.out.println(file.getName());
System.out.println(file.getPath());

絕對路徑
file=new File("H:/java/127.0.0.4/2.jpg");
System.out.println(file.getName());
System.out.println(file.getPath());

沒有盤符 ,以user.dir構建
file=new File("test.txt");
file=new File(".");
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());


-------------------------------------------------------------------------------------------------------------------------------------

package com.lucas.testIO;


/*
 * File 對象 既可以是文件  也可以是文件夾
 * 
 */
import java.io.File;
import java.io.IOException;


public class Demo2 {


public static void main(String[] args) {
// TODO Auto-generated method stub
try {
test3();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件創建失敗");
}
}
// 1、名稱
public static void test1(){
//建立聯繫
File src=new File("2.txt");
}
// 2、判斷信息
public static void test2(){
// String path="2.txt";
String path="H:/java/127.0.0.4/2.jpg";
// String path="H:/java/127.0.0.4";
//建立聯繫
File src=new File(path);
//是否存在
System.out.println("文件是否存在"+ src.exists());
    //是否可讀寫canWrite() canRead()
System.out.println("文件是否可寫" + src.canWrite());

//是否是文件  ,沒有真實存在的文件默認是文件夾
if(src.isFile()){
System.out.println("文件");
}else if(src.isDirectory()){
System.out.println("文件夾");
}else{
System.out.println("文件不存在");
}

System.out.println("是否爲絕對路徑"+src.isAbsolute());
//長度:length()  字節數  ,不能讀取文件夾的長度
System.out.println("長度爲:"+src.length());
}

//創建刪除文件
public static void test3() throws IOException{
//String path="H:/java/127.0.0.4/con";   創建失敗con爲系統關鍵字
String path="H:/java/127.0.0.4/200";
File src=new File(path);
if(!src.exists()){
boolean flag=src.createNewFile(); 
System.out.println(flag?"成功":"失敗");
}
boolean flags=src.delete();
System.out.println(flags?"成功":"失敗");

//static createTempFile (前綴 3 字節場,後綴默認爲.temp) 默認臨時空間
//static createTempFile (前綴 3 字節場,後綴默認爲.temp,目錄)
File temp=File.createTempFile("tes", ".temp", new File("H:/java/127.0.0.4"));
temp.deleteOnExit();

}

-----------------------------------------------------------------------------------------------------------------------------

package com.lucas.testIO;


import java.io.File;
import java.io.FileFilter;
/**file.mkdir(); 創建目錄,如果父目錄不存在,創建失敗
 * file.mkdirs();  創建目錄,如果父目錄不存在,一同創建
 * file.isDirectory(): 文件路徑存在並且爲目錄爲真
 * file.list(); 返回目錄下的文件名或者子目錄名,不是路徑
 * 
 * 
 * @author lx
 *
 */
public class Demo3 {


public static void main(String[] args) {
// TODO Auto-generated method stub
String path="H:/java/127.0.0.4";
File file=new File(path);
// file.mkdir();
if(file.isDirectory()){
String[] paths=file.list();
for(String pathss:paths){
System.out.println(pathss);
}
System.out.println("-------------------------------------");

File[] fileTemp=file.listFiles();
for(File f:fileTemp){
System.out.println(f.getAbsolutePath());
}

System.out.println("--------------------------------------");
fileTemp=file.listFiles(new FileFilter() {

@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
// System.out.println(pathname.getName().endsWith(".jpg"));
return pathname.isFile() && pathname.getName().endsWith(".jpg");
}
});
for(File f:fileTemp){
System.out.println(f.getAbsolutePath());
}
System.out.println("--------------------------------------");
}
}


}

------------------------------------------------------------------------------------------------------------------

package com.lucas.testIO;
import java.io.*;
import java.util.Arrays;
/**
 * 輸出子孫級目錄或者文件的名稱
 * 遞歸
 * File.listRoots();  獲取根路徑
 * 
 * @author lx
 *
 */
public class Demo4 {


public static void main(String[] args) {
// TODO Auto-generated method stub
String path="H:/java/127.0.0.4";
File parentSrc=new File(path);
// printName(parentSrc);


System.out.println("---------------------------");
File [] roots=File.listRoots();
System.out.println(Arrays.toString(roots));
System.out.println("---------------------------");
for(File root:roots){
printName(root);
}
}
//寫遞歸函數時: 將遞歸尾找到,遞歸頭 找到,遞歸頭調用本身的函數
public static void printName(File src){
if( src==null || !src.exists()){
return;


System.out.println(src.getAbsolutePath());
if(src.isDirectory()){
for(File sub:src.listFiles()){
printName(sub);
}
}


}


}

發佈了20 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章