1.相關(guān)概念
讀取文件的 內(nèi)容
I O流
流的方向:參考的是自己的內(nèi)存空間
輸出流:從內(nèi)存空間將數(shù)據(jù)寫(xiě)到外部設(shè)備(磁盤(pán)\硬盤(pán)\光盤(pán))
輸入流:將外部數(shù)據(jù)寫(xiě)到內(nèi)存中
流:統(tǒng)一管理數(shù)據(jù)的寫(xiě)入和讀取 開(kāi)發(fā)者只需要將內(nèi)存里面的數(shù)據(jù)寫(xiě)到 流里面
輸出流:開(kāi)發(fā)者只需要 將內(nèi)存里面的數(shù)據(jù)寫(xiě)到流里面
輸入流;或者從流里面讀取數(shù)據(jù)
輸出流:OutputStream字節(jié)流 Writer字符流
輸入流:InputStream字節(jié)流 Reader 字符流
I/O流對(duì)象 不屬于內(nèi)存對(duì)象 需要自己關(guān)閉
Outputtream和InputStream是抽象類(lèi) 不能直接使用
FileOutputtream/FileInputStream
ObjectOutputtream/ObjectInputtream
FileWriter/FileReader
2.向文件寫(xiě)入數(shù)據(jù)
(1)字節(jié)流
1.創(chuàng)建文件輸出流對(duì)象
FileOutputStream fos=new FileOutputStream(file);
2.調(diào)用Writer方法寫(xiě)入
byte[]text={'1','2','3','4'};
fos.write(text);
3疗我,操作完畢要關(guān)閉stream對(duì)象
fos.close();
(2)字符流
FileWriter fw=new FileWriter(file);
char[] name ={'安','卓','開(kāi)','發(fā)'};
fw.write(name);
fw.close();
3.讀取內(nèi)容
FileInputStream fis=new FileInputStream(fi
byte[]name1=new byte[12];
int count=fis.read(name1);
fis.read(name1);
fis.close();
System.out.println(new String(name1));
FileReader fr=new FileReader(file);
char[] book=new char[4];
count=fr.read(book);
fr.close();
System.out.println(new String(book));
4.向一個(gè)文件里面 存一個(gè)對(duì)象
序列化
保存的對(duì)象必須實(shí)現(xiàn)Serializable接口
如果對(duì)象內(nèi)部還有屬性變量是其他類(lèi)的對(duì)象 那這個(gè)類(lèi)也必須實(shí)現(xiàn)Serializable 接口
(1)主程序里:
//創(chuàng)建文件
String path ="/Android studio java/day/day1/src/main/java/swu/hsl/day8";
//path\\1.txt
File file=new File(path.concat("/1.txt"));
if(file.exists()==false){
//不存在就創(chuàng)建
// try {
file.createNewFile();
// }catch (IOException e){
// System.out.println("IO異常了");
// }
}
Dog wc=new Dog();
wc.name="旺財(cái)";
Person xw=new Person();
xw.age=20;
xw.name=("小王");
xw.dog=wc;
OutputStream os =new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(xw);
oos.close();
//從文件里面讀取一個(gè)對(duì)象
InputStream is =new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
Person xw = (Person)ois.readObject();
System.out.println(xw.name+""+xw.age+xw.dog.name);
ois.close();
(2)定義的類(lèi):
public class Person implements Serializable {
String name;
int age;
Dog dog;
}
class Dog implements Serializable{
String name;
}
5.將一個(gè)文件copy到另外一個(gè)位置
long start=System.currentTimeMillis();
String sourcepath="C:\\Users\\Day\\Desktop\\鬼刀\\QQ圖片20190523212913.jpg";
String despath="C:\\Users\\Day\\Desktop\\word\\3.jpg";
InputStream is =new FileInputStream(sourcepath);
BufferedInputStream bis =new BufferedInputStream(is);
OutputStream os=new FileOutputStream(despath);
BufferedOutputStream bos=new BufferedOutputStream(os);
byte[]in=new byte[1024];
while(true) {
int count = bis.read(in);
if(count!=-1){
//讀取到內(nèi)容了
//將這次讀取到的內(nèi)容寫(xiě)入目標(biāo)文件
bos.write(in,0,count);
}else {
break;
}
}
bis.close();
bos.close();
long end=System.currentTimeMillis();
System.out.println(end-start);
6.密碼解鎖的demo
(1)
public class Myclass {
public static void main(String[] args){
boolean logined =false;
//判斷是否已經(jīng)登錄
String password = FileOperation.instance.password;
if (password != null){
logined = true;
}
//提示用戶(hù)操作
String alert;
if (logined) {
alert = "請(qǐng)輸入密碼";
} else {
alert = "請(qǐng)?jiān)O(shè)置密碼";
}
System.out.println(alert);
String firt = null;
int wrongTime = 3;
while (wrongTime > 0) {
//接收用戶(hù)輸入
Scanner scanner = new Scanner(System.in);
String inputPassword = scanner.next();
//判斷操作
if (logined) {
//已經(jīng)登陸過(guò) 直接比較
if (password.equals(inputPassword)) {
System.out.println("解鎖成功");
break;
} else {
System.out.println("解鎖失敗 請(qǐng)重新輸入");
wrongTime--;
}
}else{
//沒(méi)有登陸過(guò) 在設(shè)置密碼
//判斷是設(shè)置密碼的第一次還是第二次
if (firt == null){
//第一次 保存第一次輸入的密碼
firt = inputPassword;
System.out.println("請(qǐng)確認(rèn)密碼 ");
}else{
//第二次 比較兩次輸入的密碼是否相同
if (firt.equals(inputPassword)){
System.out.println("設(shè)置密碼成功");
//保存設(shè)置的密碼
FileOperation.instance.save(firt);
break;
}else{
System.out.println("兩次密碼不一致 請(qǐng)重新設(shè)置密碼:");
firt = null;
wrongTime--;
}
}
}
scanner.nextLine();
}
}
}
(2)
public class FileOperation {
public static final String PATH="C:\\Users\\Day\\Desktop\\word\\1.txt";
String password;
public static final FileOperation instance = new FileOperation();
private FileOperation(){
try {
load();
}catch (IOException e){
}
}
public void load() throws IOException {
FileInputStream fis = new FileInputStream(PATH);
byte[] pwd = new byte[4];
int count = fis.read(pwd);
if (count == -1){
password = null;
}else{
password = new String(pwd);
}
fis.close();
}
public void save(String password){
try {
FileOutputStream fos = new FileOutputStream(PATH);
fos.write(password.getBytes());
fos.close();
} catch (IOException e){
System.out.println("io異常");
}
}
}
7.心得體會(huì)
今天關(guān)于文件的學(xué)習(xí)還是能夠吸收恢共,下來(lái)過(guò)后得好好把上課講的知識(shí)穩(wěn)固一下加深影響,這一節(jié)的內(nèi)容很重要不能知其然不知其所以然引矩,繼續(xù)加油 前路仍漫漫