Java IO 字符流
Reader字符输入流
Writer字符输出流
专门用于字符形式的读取和写入数据
使用字符流读取文件
FileReader是Reader的子类,用FileReader读取文件
package JavaIOTest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args) {
File file = new File("d:/xyz/z/zzz/zzzz/lol.txt");
//创建基于文件的Reader
try(FileReader fileReader = new FileReader(file)){
//创建字符数组,其长度就是文件的长度
char[] all = new char[(int)file.length()];
//以字符流的形式读取文件的内容
fileReader.read(all);
for (char b : all){
System.out.println(b);
}
}catch (IOException e){
e.printStackTrace();
}
}
}
使用字符流把字符串写入文件
package JavaIOTest;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
File file = new File("d:/xyz/z/zzz/zzzz/lol4.txt");
//创建基于文件的Writer对象
try( FileWriter fileWriter = new FileWriter(file)){
//以字符流的形式将数据写入到文件当中
String data = "adasdfljaljdlskjdlasjd";
fileWriter.write(data);
}catch (IOException e){
e.printStackTrace();
}
}
}
练习:文件加密
准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。
设计一个方法
public static void encodeFile(File encodingFile, File encodedFile);
在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。
加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0
字母字符:
如果是非z字符,向右移动一个,比如d变成e, G变成H
如果是z,z->a, Z-A。
字符需要保留大小写
非字母字符
比如’,&^ 保留不变,中文也保留不变
package JavaIOTest;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class EncodeTest {
public static void main(String[] args) {
EncodeTest encodeTest = new EncodeTest();
encodeTest.encodedFile();
}
public void encodedFile(){
String LetterOrDigit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
File encodingFile = new File("d:/xyz/z/zzz/zzzz/lol.txt");
char[] chars = new char[(int)encodingFile.length()];
File encodedFile = new File("d:/xyz/z/zzz/zzzz/lolencoded.txt");
try(FileReader fileReader = new FileReader(encodingFile);FileWriter fileWriter = new FileWriter(encodedFile)){
fileReader.read(chars);
System.out.println("加密前的内容");
System.out.println(new String(chars));
for (int i = 0; i<chars.length; i++){
char c = chars[i];
if (LetterOrDigit.indexOf(c)!=-1){
switch (chars[i]){
case 'Z':
c='A';
break;
case 'z':
c='a';
break;
case '9':
c='0';
break;
default:
c++;
break;
}
}
chars[i]=c;
}
System.out.println("加密后的内容");
System.out.println(new String(chars));
fileWriter.write(chars);
}catch (IOException e){
e.printStackTrace();
}
}
}
练习:解密
解密在文件加密中生成的文件。
设计一个方法
public static void decodeFile(File decodingFile, File decodedFile);
在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
解密算法:
数字:
如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
如果是0的数字,变成9
字母字符:
如果是非a字符,向左移动一个,比如e变成d, H变成G
如果是a,a->z, A-Z。
字符需要保留大小写
非字母字符:
比如’,&^ 保留不变,中文也保留不变
package JavaIOTest;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
public class DecodeTest {
public static void main(String[] args) {
File encodedFile = new File("d:/xyz/z/zzz/zzzz/lolencoded.txt");
File decodedFile = new File("d:/xyz/z/zzz/zzzz/loldecoded.txt");
DecodeTest.decodeFile(encodedFile,decodedFile);
}
public static void decodeFile(File...targetFile){
String LetterOrDigit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int log = 0;
File encodedFile = targetFile[0];
File decodedFile = targetFile[1];
char[] chars = new char[(int)encodedFile.length()];
try(FileReader fileReader = new FileReader(encodedFile); FileWriter fileWriter = new FileWriter(decodedFile)){
fileReader.read(chars);
System.out.println("解密前的内容:");
System.out.println(new String(chars));
System.out.println();
for (char c : chars){
if (LetterOrDigit.indexOf(c)!=-1){
switch (c){
case '0':
chars[log]='9';
break;
case 'a':
chars[log]='z';
break;
case 'A':
chars[log]='Z';
break;
default:
chars[log]--;
break;
}
}
log++;
}
fileReader.read(chars);
System.out.println("解密后的内容:");
System.out.println(new String(chars));
fileWriter.write(chars);
}catch (IOException e){
e.printStackTrace();
}
}
}