欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java-IO流-創(chuàng)新互聯(lián)

流操作的是文件的內(nèi)容,這個(gè)內(nèi)容始終需要存儲(chǔ)在文件中,否則等待程序關(guān)閉后就會(huì)煙消云散。數(shù)據(jù)存儲(chǔ)最終是以文件的形式保存在在操作系統(tǒng)中的磁盤(pán)上。Java中對(duì)應(yīng)的類是File。

創(chuàng)新互聯(lián)公司,專注為中小企業(yè)提供官網(wǎng)建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站制作、自適應(yīng)網(wǎng)站建設(shè)、展示型成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)等服務(wù),幫助中小企業(yè)通過(guò)網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷(xiāo)推廣問(wèn)題。
//在磁盤(pán)中創(chuàng)建一個(gè)文件
File file = new File("d:\\test.txt");
//創(chuàng)建文件:
file.createNewFile();
//創(chuàng)建文件夾:
file.mkdir();
//檢測(cè)文件是否存在:
file.exists()

例子

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileCreateDemo {public static void main(String[] args) {String path = FileReader.class.getResource("/").getFile();
        String fileName = path + "/test.txt";
        File file = new File(fileName);
        // 創(chuàng)建文件
        try {file.createNewFile();
            System.out.println(file.exists());
            String dirName = path + "/myFolder";
            File dir = new File(dirName);
            //創(chuàng)建文件夾
            dir.mkdir();
            System.out.println(dir.exists());
        } catch (IOException e) {e.printStackTrace();
        }
    }
}

看下file對(duì)象的一些常用方法吧:

作用函數(shù)簽名
獲取文件名String getName()
磁盤(pán)文件是否存在boolean exists()
獲取文件的磁盤(pán)絕對(duì)地址String getAbsolutePath()
列取文件夾下的文件列表有過(guò)濾器有文件名過(guò)濾器file必須是文件夾才能使用File[] listFiles() File[] listFiles(FileFilter filter)File[] listFiles(FilenameFilter filter)blob.png
創(chuàng)建文件夾boolean mkdir()
創(chuàng)建文件指定目錄中創(chuàng)建指定前綴和后綴的文件boolean createNewFile()createTempFile(String prefix, String suffix, File directory)
獲取父目錄blob.pngString getParent()//上層文件路徑 File getParentFile()//上層文件
是否隱藏boolean isHidden()
刪除文件boolean delete()

例子

import java.io.File;
import java.io.FileReader;
public class FileInfoDemo {public static void main(String[] args) {//獲取當(dāng)前項(xiàng)目運(yùn)行時(shí)所在根目錄
        String path = FileReader.class.getResource("/").getFile();
        String fileName = path;
        showFileInfo(fileName);
    }
    public static void showFileInfo(String fileName) {File file = new File(fileName);
        for (File f : file.listFiles()) {String str = "";
            if (f.isDirectory()){str = "文件夾";
                //getAbsolutePath()獲取文件的磁盤(pán)絕對(duì)地址
                showFileInfo(f.getAbsolutePath());
            } else {str = "文件";
            }

對(duì)象狀態(tài)在內(nèi)存中或者在網(wǎng)絡(luò)間傳輸?shù)臓顟B(tài)是瞬時(shí)狀態(tài),對(duì)象狀態(tài)被保存到磁盤(pán)的文件中(磁盤(pán)文件或數(shù)據(jù)庫(kù)文件中),是持久化狀態(tài)。而這個(gè)由瞬時(shí)到持久的過(guò)程稱為“持久化”。

以數(shù)據(jù)的流向分類,能夠讀取字節(jié)的序列的API對(duì)象成為輸入流(InputStream),能夠?qū)懭胱止?jié)序列的成為輸出流(OutputStream)。字節(jié)是計(jì)算機(jī)數(shù)據(jù)的存儲(chǔ)的形式,任何數(shù)據(jù)都可以使用字節(jié)流進(jìn)行讀寫(xiě)。JAVA中有專門(mén)提供了對(duì)于字符流的兩個(gè)抽象類Reader和Writer

分類: IO流按照操作對(duì)象:字節(jié)流和字符流 ; 按照流的方向分:輸入流和輸出流

圖片3.png

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test {public static void main(String[] args)throws Exception { FileInputStream fis = new FileInputStream("D:\\工作文檔\\Test.java");
         FileOutputStream fos = new FileOutputStream("D:\\工作文檔\\COPY\\Test2.java");
        
        int n;
        ----------------------------方法一------------------------------------
        while((n=fis.read()) != -1){//System.out.print((char)n);
            fos.write(n);
        }
        ----------------------------方法二------------------------------------
         byte[] bytes = new byte[1024];
         while((n=(fis.read(bytes))) != -1){//System.out.print((char)n);
            fos.write(bytes,0,n);
        }
        fis.close();
        fos.close();
    }
   }

多次運(yùn)行寫(xiě)入文件的內(nèi)容始終是最后的一次輸入,之前的寫(xiě)入都被覆蓋掉了。
構(gòu)造函數(shù)構(gòu)造出來(lái)的FileOutputStream(fileName) 是不支持追加內(nèi)容的
在輸出流從創(chuàng)建到關(guān)閉的過(guò)程中可以多次使用write寫(xiě)入數(shù)據(jù),
但是再次打開(kāi)流時(shí),文件會(huì)重頭寫(xiě),所以會(huì)覆蓋掉以前的內(nèi)容。

FileOutputStream fos = new FileOutputStream(fileName);

構(gòu)造追加內(nèi)容的輸出流:

FileOutputStream fos = new FileOutputStream(fileName,true);

更改后的代碼是能夠追加內(nèi)容到文件中。

fos.write(content.getBytes());//按照字節(jié)寫(xiě)
fis.read(bytes);//按照字節(jié)讀
fis.read(bytes,off,len)// byte 要存放讀取的字節(jié)數(shù)組,off起點(diǎn),len讀取長(zhǎng)度
fis.skip(len);//跳過(guò)多少字節(jié)
System.getProperty("file.encoding") //查看系統(tǒng)中文件的編碼。
    
//文件輸入輸出字節(jié)流的詳細(xì)API如下:
//FileInputStream字節(jié)流常用的API:
fis.skip(len);//跳過(guò)一定字節(jié)
fis.read();//按照字節(jié)逐個(gè)讀取
fis.read(byte[]);//從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組 b 中
fis.read(byte[],off,len);//將輸入流中最多l(xiāng)en個(gè)數(shù)據(jù)字節(jié)讀入byte數(shù)組的偏移位置off處
fis.close();//關(guān)閉輸入流

//FileOutputStream字節(jié)流常用的API
write(byte[] b);//將 b.length 個(gè)字節(jié)寫(xiě)入此輸出流
write(byte[] b, int off, int len);//將指定byte數(shù)組中從偏移量off開(kāi)始的len個(gè)字節(jié)寫(xiě)入此輸出流
write(int b);//將指定byte寫(xiě)入此輸出流
void flush();//刷新此輸出流,并強(qiáng)制將所有已緩沖的輸出字節(jié)寫(xiě)入該流中
close()//關(guān)閉流

字節(jié)流缺點(diǎn):在讀取文本的時(shí)候非常不方便,需要按照字節(jié)進(jìn)行操作,這也是字符流出現(xiàn)的原因。

字節(jié)流優(yōu)點(diǎn):字節(jié)流不僅可以操作文本,還可以操作讀取其他媒體:如mp3,圖片,還有視頻,這些都可以使用字節(jié)流進(jìn)行操作

例子:內(nèi)容讀取,追加兩位同學(xué)的信息,每行一條Lucy,女,15;Lilei,男,16

import java.io.*;

public class StudentFile {public static void main(String[] args) {String path = FileReader.class.getResource("/").getFile();
		String fileName = path + "/student.data";
		String info=StudentFile.readStudentInfo(fileName);
		System.out.println(info);
		String[] infos={"Lucy,女,15","Lilei,男,16"};
		StudentFile.writeStr2File(fileName,infos);
		info=StudentFile.readStudentInfo(fileName);
		System.out.println(info);
	}

	public static void writeStr2File(String fileName, String[] infos) {try{	FileOutputStream fos = new FileOutputStream(fileName, true);
			for (String line : infos) {		line = "\r\n" + line;
				fos.write(line.getBytes());
			}
			fos.close();
		}catch(Exception e){	e.printStackTrace();
		}
	}

	public static String readStudentInfo(String fileName) {try {	FileInputStream fis = new FileInputStream(fileName);
            //available()可以讀取的剩余字節(jié)數(shù)
			byte[] bytes = new byte[fis.available()];
			fis.close();
			return new String(bytes);
		} catch (Exception e) {	e.printStackTrace();
		}
		return null;
	}
}

序列化 (Serialization)將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程,可以通過(guò)從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。可序列化的對(duì)象,這個(gè)類必須是實(shí)現(xiàn)了Serializable接口的類,而且其成員變量也必須是可序列化的。

序列化: 父類如果是可序列化的,子類也是可序列化的;類的成員變量全部是可序列化的,類才能被正常可序列化。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KLXRzqVn-1672105540832)(C:\Users\maker\AppData\Roaming\Typora\typora-user-images\image-20220727084250746.png)]

import java.io.FileReader;
import java.io.FileWriter;


public class Test2 {public static void main(String[] args)throws Exception { FileReader fr = new FileReader("D:\\工作文檔\\Test.java");
         FileWriter fw = new FileWriter("D:\\工作文檔\\COPY\\Test2.java");
        
        int n;
        char[] chars = new char[1024];
        while((n=fr.read(chars)) != -1){//System.out.print(n);
            fw.write(chars,0,n);
        }
        fr.close();
        fw.close();
    }
   }

字符輸出流

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-buiSfHPI-1672105540832)(C:\Users\maker\AppData\Roaming\Typora\typora-user-images\image-20220727085141225.png)]

import java.io.*;



public class Test3 {public static void main(String[] args)throws Exception { FileReader fr = new FileReader("D:\\工作文檔\\Test.java");
         FileWriter fw = new FileWriter("D:\\工作文檔\\COPY\\Test2.java");
         BufferedReader br = new BufferedReader(fr);
         BufferedWriter bw = new BufferedWriter(fw);
        
         int count = 0;
         String line = null;
         while((line=br.readLine()) != null){count++
            bw.write(line);
            bw.newLine();
        }
        fr.close();
        br.close();
        bw.close();
        fw.close();
    }
   }

總結(jié)

1) 流按照流向可以分為:輸入流/輸出流;按照操作的對(duì)象可以分為字符流/字節(jié)流
2)字節(jié)流的操作的基類是InputStream,OutputStream這是基本的抽象類。字符流的操作的基類是Reader,Writer這些是字符流的基本抽象類,它們不能直接被實(shí)例化,所以我們還需要進(jìn)行具體常見(jiàn)子類的學(xué)習(xí)
3) 磁盤(pán)文件的字節(jié)流FileInputStream FileOutputStream可以很方便的對(duì)磁盤(pán)上的文件進(jìn)行讀寫(xiě)和復(fù)制
4)對(duì)象流可以將對(duì)象的狀態(tài)進(jìn)行序列化和反序列化到磁盤(pán)上進(jìn)行存儲(chǔ)和恢復(fù),但是要求我們的對(duì)象包括其成員都要實(shí)現(xiàn)Serializable接口
入流/輸出流;按照操作的對(duì)象可以分為字符流/字節(jié)流
2)字節(jié)流的操作的基類是InputStream,OutputStream這是基本的抽象類。字符流的操作的基類是Reader,Writer這些是字符流的基本抽象類,它們不能直接被實(shí)例化,所以我們還需要進(jìn)行具體常見(jiàn)子類的學(xué)習(xí)
3) 磁盤(pán)文件的字節(jié)流FileInputStream FileOutputStream可以很方便的對(duì)磁盤(pán)上的文件進(jìn)行讀寫(xiě)和復(fù)制
4)對(duì)象流可以將對(duì)象的狀態(tài)進(jìn)行序列化和反序列化到磁盤(pán)上進(jìn)行存儲(chǔ)和恢復(fù),但是要求我們的對(duì)象包括其成員都要實(shí)現(xiàn)Serializable接口
5)使用字符流的子類讀取寫(xiě)入數(shù)據(jù)如FileReader FileWriter 以及帶緩存的字符流進(jìn)行按行讀取寫(xiě)入文件;File類是對(duì)磁盤(pán)上的文件和目錄的抽象,使用File類的方法:createNewFile()、mkdir()、mkdirs()、delete()、renameTo(File dest)、isDirectory()、isFile()、exists()、canRead()、isHidden()等方法,能進(jìn)行磁盤(pán)文件的管理

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:java-IO流-創(chuàng)新互聯(lián)
文章URL:http://chinadenli.net/article24/ehpje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作動(dòng)態(tài)網(wǎng)站網(wǎng)站策劃域名注冊(cè)網(wǎng)站維護(hù)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化