java基础----编解码 转换流

package cn.itcast.other;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
/*
编码与解码 
 
 编码: 把看得懂的字符变成看不懂码值这个过程我们称作为编码。
 
解码: 把码值查找对应的字符,我们把这个过程称作为解码。


注意: 以后编码与解码一般我们都使用统一的码表。否则非常容易出乱码。


 */


public class Demo7 {

public static void main(String[] args) throws Exception {
/*
String str = "中国";
byte[] buf = str.getBytes("utf-8");// 平台默认的编码表是gbk编码表。  编码
System.out.println("数组的元素:"+Arrays.toString(buf)); //

str = new String(buf,"utf-8");  //默认使用了gbk码表去解码。 
System.out.println("解码后的字符串:"+ str);
*/


/*String str = "a中国"; // ,0, 97, 78, 45, 86, -3
byte[] buf = str.getBytes("unicode");  //编码与解码的时候指定 的码表是unicode实际上就是用了utf-16.
System.out.println("数组的内容:"+ Arrays.toString(buf));
*/


String str = "大家好";
byte[] buf = str.getBytes(); //使用gbk进行编码
System.out.println("字节数组:"+ Arrays.toString(buf));  // -76, -13, -68, -46, -70, -61

str = new String(buf,"iso8859-1");
// 出现乱码之后都可以被还原吗?  不一定 

byte[] buf2 = str.getBytes("iso8859-1");
str = new String(buf2,"gbk"); 


System.out.println(str);




}

}



package cn.itcast.other;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
/*
 转换流:
 
输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥
  InputStreamReader
 
输出字节流的转换流:
OutputStreamWriter   可以把输出字节流转换成输出字符流 。  
 
 
转换流的作用:
1. 如果目前所 获取到的是一个字节流需要转换字符流使用,这时候就可以使用转换流。  字节流----> 字符流
  2. 使用转换流可以指定编码表进行读写文件。
 
 
 */




public class Demo8 {

public static void main(String[] args) throws IOException {
// readTest();
// writeTest();'

// writeTest2();
readTest2();
}

//使用输入字节流的转换流指定码表进行读取文件数据
public static void readTest2() throws IOException{
File file = new File("F:\\a.txt");
FileInputStream fileInputStream = new FileInputStream(file);
//创建字节流的转换流并且指定码表进行读取
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
char[] buf = new char[1024];
int length = 0;
while((length = inputStreamReader.read(buf))!=-1){
System.out.println(new String(buf,0,length));
}

}





//使用输出字节流的转换流指定码表写出数据
public static void writeTest2() throws IOException{
File file = new File("F:\\a.txt");
//建立数据的输出通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
//把输出字节流转换成字符流并且指定编码表。
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
outputStreamWriter.write("新中国好啊");
//关闭资源
outputStreamWriter.close();

}



public static void writeTest() throws IOException{
File file = new File("F:\\a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
//把输出字节流转换成输出字符流。
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);

outputStreamWriter.write("大家好");
outputStreamWriter.close();

}




public static void readTest() throws IOException{
InputStream in = System.in; //获取了标准的输入流。
// System.out.println("读到 的字符:"+ (char)in.read());  //read()一次只能读取一个字节。
//需要把字节流转换成字符流。
InputStreamReader inputStreamReader = new InputStreamReader(in);
//使用字符流的缓冲类
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while((line = bufferedReader.readLine())!=null){
System.out.println("内容:"+ line);
}


}


}



package cn.itcast.other;


/*
递归:函数的自身调用函数的自身。


递归的使用前提: 必须要有条件的情况下调用。




需求: 算出5的阶乘。 5! = 5*4 *3 * 2*1 




*/
public class Demo9 {


public static void main(String[] args) {
int result = print(5);
System.out.println("结果:"+ result);
}

public static int print(int num){
if(num==1){
return 1;
}else{
return num*print(num-1);
}
}




public static int test(int num){
int result  =  1;
while(num>0){
result = result*num;
num--;
}
return result;
}
}




package cn.itcast.other;


import java.io.File;


/*
 需求1:列出一个文件夹的子孙文件与目录。
 
 2,列出指定目录中所有的子孙文件与子孙目录名,要求名称前面要有相应数量的空格:
第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。


3,列出指定目录中所有的子孙文件与子孙目录名,要求要是树状结构,效果如下所示:
|--src
|   |--cn
|   |   |--itcast
|   |   |   |--a_helloworld
|   |   |   |   |--HelloWorld.java
|   |   |   |--b_for
|   |   |   |   |--ForTest.java
|   |   |   |--c_api
|   |   |   |   |--Student.java
|--bin
|   |--cn
|   |   |--itcast
|   |   |   |--i_exception
|   |   |   |   |--ExceptionTest.class
|   |   |   |--h_linecount
|   |   |   |   |--LineCounter3.class
|   |   |   |   |--LineCounter2.class
|   |   |   |   |--LineCounter.class
|--lib
|   |--commons-io.jar


需求4: 删除一个非空的文件夹。 
 
 
作业:  剪切一个非空目录。


 
 */




public class Demo10 {

public static void main(String[] args) {
/* File dir = new File("F:\\1208project\\day22");
listFiles3(dir,"|--");*/

File dir = new File("F:\\aa");
deleteDir(dir);
}


//删除了一个非空的目录
public static void deleteDir(File dir){ // bb
File[] files = dir.listFiles(); //列出了所有的子文件
for(File file : files){
if(file.isFile()){
file.delete();
}else if(file.isDirectory()){
deleteDir(file);
}
}
dir.delete();
}




public static void listFiles3(File dir,String space){ //space 存储的是空格
File[] files = dir.listFiles(); //列出所有 的子文件
for(File file : files){
if(file.isFile()){
System.out.println(space+file.getName());
}else if(file.isDirectory()){
System.out.println(space+file.getName());
listFiles3(file,"|   "+space);
}

}


}



//列出一个文件夹的子孙文件与目录。
public static void listFiles2(File dir,String space){ //space 存储的是空格
File[] files = dir.listFiles(); //列出所有 的子文件
for(File file : files){
if(file.isFile()){
System.out.println(space+file.getName());
}else if(file.isDirectory()){
System.out.println(space+file.getName());
listFiles2(file,"  "+space);
}

}


}




//列出一个文件夹的子孙文件与目录。
public static void listFiles1(File dir){
File[] files = dir.listFiles(); //列出所有 的子文件
for(File file : files){
if(file.isFile()){
System.out.println("文件名:"+file.getName());
}else if(file.isDirectory()){
System.out.println("文件夹:"+file.getName());
listFiles1(file);
}

}


}

}

猜你喜欢

转载自blog.csdn.net/sophiaviayang/article/details/77285286