java基礎----編解碼 轉換流
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
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);
}
}
}
}