文章目录
第十三章 Java 流(Stream)、文件(File)和IO
13.1 BufferedReader语法
(1)多字符输入
import java.io.*;
public class ioTest{
public static void main(String[] args) throws IOException{
//读入字符并一个个打印出来
char ch;
System.out.println("输入字符,按下q退出:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(;;){
ch = (char)br.read();
System.out.println(ch);
if(ch=='q')
break;
}
(2)字符串输入
public static void main(String[] args) throws IOException{
//读入字符串
String s;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入,'q'退出:");
do{
s = br.readLine();
System.out.println(s);
}while(!"q".equals(s));
}
13.2 读写文件
(1)可能造成乱码
import java.io.*;
public class fileTest{
// public static void main(String[] args) throws IOException{
// byte[] s ={11,22,33,44};
// int i;
// OutputStream f = new FileOutputStream("tt.txt");
// for(i=0;i<s.length;i++){
// f.write(s[i]);
// }
// f.close();
// InputStream f2 = new FileInputStream("tt.txt");
// int size = f2.available();
// int j;
// for(j=0;j<size;j++){
// System.out.println((char)f2.read());
// }
// f2.close();
// }
public static void main(String[] args){
try{
byte[] s ={11,22,33,44};
int i;
OutputStream f = new FileOutputStream("tt.txt");
for(i=0;i<s.length;i++){
f.write(s[i]);
}
f.close();
InputStream f2 = new FileInputStream("tt.txt");
int size = f2.available();
int j;
for(j=0;j<size;j++){
System.out.println((char)f2.read());
}
f2.close();
}catch(IOException e){
System.out.println("IOException");
}
}
}
(2)解决乱码
import java.io.*;
public class fileTest2{
// public static void main(String[] args) throws IOException{
// File f = new File("tt2.txt");
// FileOutputStream out = new FileOutputStream(f);
// OutputStreamWriter outWrite = new OutputStreamWriter(out,"UTF-8");
// outWrite.append("中文");
// outWrite.append("11223344");
// outWrite.append("#_-! ?");
// outWrite.append("china");
// outWrite.close();
// out.close();
// System.out.println("成功");
// }
public static void main(String[] agrs) throws IOException{
FileInputStream fip = new FileInputStream("tt2.txt");//创建输入流
InputStreamReader in2 = new InputStreamReader(fip,"UTF-8");
StringBuffer sb = new StringBuffer();
while(in2.ready()){
//System.out.println((char)in2.read());
sb.append((char)in2.read());
System.out.println(sb);
}
System.out.println(sb);
in2.close();//关闭读取流
fip.close();//关闭输入流
}
}
13.3 Java中的目录
13.3.1 创建目录
public static void main(String[] args){
//wimdows系统记得要加.,很多教程是Linux,所以用/tmp
String dir = "./tmp";
String dir1 = "./tmp/java";
File f1 = new File(dir1);
File f = new File(dir);
//f1.mkdirs();
//System.out.println(f1.mkdir());//false
//System.out.println(f1.mkdir());//true
System.out.println(f1.mkdirs());
}
13.3.2 读取目录
import java.io.File;
public class CreateDir{
// public static void main(String[] args){
// String s = "./1";//或者使用绝对路径
// int i;
// File f = new File(s);
// //System.out.println(f.mkdir());
// if(f.isDirectory()){
// System.out.println(s+"目录");
// String[] s2 = f.list();
// for(i=0;i<s2.length;i++){
// File f2 = new File(s+"/"+s2[i]);
// if(f2.isDirectory()){
// System.out.println(s+"/"+s2[i]+"目录");
// }else{
// System.out.println(s+"/"+s2[i]+"文件");
// }
// }
// }else{
// System.out.println(s+"不是目录");
// }
// }
public static void main(String[] args){
String s = "./1";
File f = new File(s);
if(f.isDirectory()){
System.out.println(s+"目录");
File[] fs = f.listFiles();
for(File f1:fs){
if(f1.isDirectory()){
System.out.println(f1+"目录");
}else{
System.out.println(f1+"文件");
}
}
}else{
System.out.println(s+"不是目录");
}
}
}
13.4 删除目录或文件
删除文件可以使用 java.io.File.delete() 方法。
以下代码会删除目录 /tmp/java/,需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
//只是变成空文件夹而已,为什么呢?
public static void main(String[] args){
String dir = "./1/2/";
File f1 = new File(dir);
DeleteFolder(f1);
System.out.println("ok!");
}
public static void DeleteFolder(File folder){
File[] fs = folder.listFiles();
if(fs!=null){
for(File f2:fs){
if(f2.isDirectory()){
DeleteFolder(f2);
}else{
f2.delete();
}
}
}else{
folder.delete();
}
}
解决:
else{
folder.delete();
}
改为:
folder.delete();//突然自己多加了else,这样跳出if后不会再进入else里
第十四章 循环
这里主要补充Java的一个循环,其他的循环与c语言结构相同,这里就不叙述。
- Java5 引入了一种主要用于数组的增强型 for 循环。
Java 增强 for 循环语法格式如下:
for(声明语句 : 表达式)
{
//代码句子
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
int[] as = {1,2,3,4};
for(int a1:as){
System.out.println(a1);
}