目錄
前言:
1.拷貝文件(含子文件)
思路:
2.文件加密
思路:
3.修改文件中的數(shù)據(jù):
思路:
總結(jié):
前言:
? ? ? ? 在前面我們?yōu)榇蠹医榻B了FILE類和IO類。這篇文章我們來(lái)練習(xí)一些綜合使用的例子以此來(lái)鞏固我們自己的所學(xué)知識(shí)。
1.拷貝文件(含子文件)
思路:
建立一個(gè)讀文件的流來(lái)讀取文件,一個(gè)寫文件的流來(lái)創(chuàng)建文件,整體建立框架為:如果是文件夾就建立一個(gè)文件夾,并且繼續(xù)向內(nèi)訪問,如果是文件就進(jìn)行拷貝復(fù)制。
import java.io.*;
public class file3 {
public static void main(String[] args) throws IOException {
//1.創(chuàng)建對(duì)象表示數(shù)據(jù)源
File src = new File("D:\\aaa\\bbb");
//2.創(chuàng)建對(duì)象表示目的地
File dest = new File("D:\\aaa\\dest");
//3.開始拷貝
copydir(src,dest);
}
private static void copydir(File src, File dest) throws IOException {
dest.mkdirs();
//遞歸
//1.進(jìn)入數(shù)據(jù)源
File[] files = src.listFiles();
//依次便利數(shù)組
for (File file : files) {
if(file.isFile())
{
//如果是文件就拷貝
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));
byte[]bytes = new byte[1024];
int len;
while((len=fis.read(bytes))!=-1)
{
fos.write(bytes,0,len);
}
fos.close();
fis.close();
}
else {
//如果是文件夾就遞歸
copydir(file,new File(dest,file.getName()));
}
}
}
}
2.文件加密
思路:
加密原理:對(duì)原始文件中的每一個(gè)字節(jié)數(shù)據(jù)進(jìn)行更改,然后將已經(jīng)更改后的數(shù)據(jù)存儲(chǔ)到一個(gè)新的文件之中。
解密原理:讀取解密之后的文件,按照加密的規(guī)則反向操作,變成原始文件。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class file4 {
public static void main(String[] args) throws IOException {
//1.創(chuàng)建對(duì)象關(guān)聯(lián)原始文件
FileInputStream fis = new FileInputStream("c.txt");
//創(chuàng)建對(duì)象關(guān)聯(lián)加密文件
FileOutputStream fos = new FileOutputStream("jiami.txt");
//進(jìn)行加密
int b;
while((b=fis.read())!=-1);
{
fos.write(b^2);
}
fos.close();
fis.close();
//進(jìn)行解密
//1.創(chuàng)建對(duì)象關(guān)聯(lián)原始文件
FileInputStream fis1 = new FileInputStream("jiami.txt");
//創(chuàng)建對(duì)象關(guān)聯(lián)加密文件
FileOutputStream fos1 = new FileOutputStream("jiemi.txt");
//進(jìn)行解密
int b1;
while((b1=fis1.read())!=-1);
{
fos1.write(b1^2);
}
fos1.close();
fis1.close();
}
}
需要注意的是:這種更改字節(jié)數(shù)據(jù)的加密方式我們一般使用位運(yùn)算進(jìn)行更改,這樣可以避免我們因?yàn)閷?duì)字節(jié)數(shù)據(jù)進(jìn)行算數(shù)運(yùn)算而導(dǎo)致的溢出現(xiàn)象報(bào)錯(cuò)。
3.修改文件中的數(shù)據(jù):
文本文件中有以下數(shù)據(jù):
2-1-9-4-7-8
將文本中的數(shù)據(jù)進(jìn)行排序輸出,變?yōu)橐韵聰?shù)據(jù):
1-2-4-7-8-9
思路:
先切割字符串,然后得到數(shù)字再排序,最后再創(chuàng)建新文件錄入。
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class file5 {
public static void main(String[] args) throws IOException {
//1.讀取數(shù)據(jù)并拼接成為一個(gè)字符串進(jìn)行操作
FileReader fr = new FileReader("c.txt");
StringBuilder sb = new StringBuilder();
int ch;
while((ch=fr.read())!=-1)
{
sb.append((char) ch);
}
fr.close();
//2.排序
String s= sb.toString();
String[] arrstr = s.split("-");
ArrayList<Integer> list = new ArrayList<>();
for (String s1 : arrstr) {
int i = Integer.parseInt(s1);
list.add(i);
}
Collections.sort(list);
//向新文件寫入數(shù)據(jù)
FileWriter fw = new FileWriter("b.txt");
for(int i=0;i<list.size();i++)
{
if(i==list.size()-1)
{
fw.write(list.get(i)+"");
}
else {
fw.write(list.get(i)+"-");
}
}
fw.close();
}
}
其實(shí)我們可以在排序階段進(jìn)行優(yōu)化,使用我們之前學(xué)習(xí)的Stream流的知識(shí)。
Integer[] array = Arrays.stream(sb.toString()
.split("-"))
.map(Integer::parseInt)
.sorted()
.toArray(Integer[]::new);
總結(jié):
? ? ? ? 關(guān)于IO流和File類的練習(xí)并不會(huì)很難,關(guān)鍵是我們要熟練的掌握IO流和File的各個(gè)子類,越熟練越好。
如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-626893.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-626893.html
到了這里,關(guān)于【從零開始學(xué)習(xí)JAVA | 第三十五篇】IO流綜合練習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!