File
public class TestFile {
public static void main(String[] args) throws Exception{
File file =new File("E:\\Test\\1.txt");
System.out.println(file);
File file1=new File("E:\\Test","1.txt");
File parent=new File("E:\\Test");
File file2=new File(parent,"1.txt");
System.out.println(file.length());
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println(file.getName());
System.out.println(file.getParent());
System.out.println(file.getAbsolutePath());
File file3;
file3 = new File("E:\\Test\\1.txt");
System.out.println(file.createNewFile());
file3 =new File("E:\\Test\\m");
System.out.println(file.mkdir());
file3 =new File("E:\\Test1\\m");
System.out.println(file.mkdirs());
System.out.println(file3.renameTo(new File("E:\\Test1\\M")));
File file4 =new File("E:\\Test");
String [] list=file4.list();
System.out.println(Arrays.toString(list));
File [] file5=file4.listFiles();
System.out.println(Arrays.toString(file5));
}
}
递归
递归三要素:
1.递归的结束条件
2.递归的函数关系
3.调用自身
public static void main(String[] args) {
System.out.println(method(6));
public static int method(int n){
if(n==0) return 1;
if(n==1) return 2;
return f(n-1)+f(n-2);
}
public static void main(String[] args) {
System.out.println(method(5));
public static int method(int i){
if (i==1) return 1;
return i*method(i-1);
}
public static void main(String[] args) {
System.out.println(method(7));
}
public static int method(int i){
if(i==0) return 2;
if(i==1) return 3;
if (i%2==0) {
return method2(i-2)*2;
}
return 3*method2(i-2);
public class MuLu {
public static void main(String[] args) {
File file=new File("E:\\Test");
diguiFolder(file);
}
public static void diguiFolder(File file){
if (!file.exists()){
System.out.println("文件或目录不存在");
return;
}
if (file.isFile()){
System.out.println("文件没有下级");
return;
}
File[] files=file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()){
System.out.println(files[i]+"文件");
}else {
System.out.println(files[i]);
diguiFolder(files[i]);
}
}
}
}
public static void main(String[] args) throws Exception{
String s="E:\\Test\\m\\11.txt";
String t="E:\\Test\\m\\22.txt";
FileInputStream in=new FileInputStream(s);
FileOutputStream out=new FileOutputStream(t);
int i;
while ((i=in.read()) !=-1){
out.write(i);
}
out.close();
in.close();
System.out.println("复制完成");
}
IO流
输入流(硬盘到Java程序):
字节输入流 InputStream (万能流) byte
FileInputStream:文件字节输入流,BufferedInputStream:缓冲字节输入流
字符输入流 Reader char (只能处理记事本能打开的且能正常显示的)
FileReader:文件字符输入流,BufferedReader:缓冲字符输入流
输出流(Java程序到硬盘):
字节输出流 OutputStream (万能流) byte
FileOutputStream:文件字节输出流,BufferedOutputStream:缓冲字节输出流
字符输出流 Writer char (只能处理记事本能打开的且能正常显示的)
FileWriter:文件字符输出流,BufferedWriter:缓冲字符输出流
字节流
FileInputStream
public class InDemo {
public static void main(String[] args) throws Exception{
FileInputStream in=new FileInputStream("E:\\Test\\m\\11.txt");
System.out.println(in.read());
System.out.println((char)in.read());
int i;
while ((i=in.read()) !=-1){
System.out.println((char) i);
}
in.close();
}
}
FileOutputStream
public class OutDemo {
public static void main(String[] args) throws Exception{
FileOutputStream out=new FileOutputStream("E:\\Test\\m\\11.txt",false);
out.write(65);
out.write("\r\n".getBytes());
byte [] b={'a','b','c'};
out.write(b);
out.write("\r\n".getBytes());
out.write("123".getBytes());
out.write("\r\n".getBytes());
out.write("hellojava".getBytes(),0,5);
out.close();
System.out.println("数据写出成功,关闭流");
}
}
BufferedInputStream
public class FISDemo {
public static void main(String[] args) throws Exception{
FileInputStream fis=new FileInputStream("E:\\Test\\m\\11.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
int i;
while ((i=bis.read()) !=-1){
System.out.println((char) i);
}
bis.close();
}
}
BufferedOutputStream
public class BOSDemo {
public static void main(String[] args) throws Exception{
OutputStream os=new FileOutputStream("E:\\Test\\m\\11.txt");
BufferedOutputStream bos=new BufferedOutputStream(os);
bos.write(65);
bos.write('\r');
bos.write('\n');
byte[] bs={'a', 'c','\r','\n'};
bos.write(bs);
bos.close();
}
}
字符流
FileReader
public class FileReaderDemo {
public static void main(String[] args) throws Exception{
FileReader fr=new FileReader("E:\\Test\\m\\33.txt");
int i;
while ((i=fr.read()) !=-1){
System.out.print((char) i);
}
fr.close();
}
}
FileWriter
public class FileWriterDemo {
public static void main(String[] args) throws Exception{
FileWriter fw=new FileWriter("E:\\Test\\m\\22.txt",true);
fw.write(65);
fw.write(66);
fw.write('\r');
fw.write('\n');
char[] ch={'c','d'};
fw.write(ch);
fw.write("0123456789".toCharArray(),0,6);
fw.write("helloworld\r\n");
fw.write("helloworld\r\n",0,5);
fw.flush();
fw.close();
}
}
BufferedReader
public class BufferedReaderDemo {
public static void main(String[] args) throws Exception{
Reader r=new FileReader("E:\\Test\\m\\44.txt");
BufferedReader br=new BufferedReader(r);
System.out.println((char) br.read());
System.out.println(br.readLine());
String i;
while((i=br.readLine())!=null) {
System.out.println(i);
}
br.close();
}
}
BufferedWriter
public class BufferedWriterDemo {
public static void main(String[] args) throws Exception{
Writer fw=new FileWriter("E:\\Test\\m\\33.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write(65);
bw.write(66);
bw.newLine();
char[] ch={'c','d'};
bw.write(ch);
bw.write("0123456789".toCharArray(),0,6);
bw.write("helloworld");
bw.newLine();
bw.write("helloworld",0,5);
bw.newLine();
bw.flush();
bw.close();
}
}
字节流字符流转换
字节转字符
public static void main(String[] args) throws Exception{
FileWriter writer=new FileWriter("E:\\Test\\1.txt",true);
System.out.println(writer.getEncoding());
writer.write("平亿近人");
writer.close();
System.out.println("成功写入");
}
字符转字节
public static void main(String[] args) throws Exception{
FileOutputStream fos=new FileOutputStream("E:\\Test\\1.txt",true);
OutputStreamWriter writer=new OutputStreamWriter(fos,"utf-8");
writer.write("甜崽,你好");
writer.flush();
fos.close();
System.out.println("成功写出");
}
序列化
ObjectOutputStream类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
需要序列化的类必须实现 java.io.Serializable 接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出异常
该类中如果有属性不需要序列化的,则该属性必须使用transient 关键字修饰
public class XuLieHua {
public static void main(String[] args) throws Exception{
FileOutputStream fos=new FileOutputStream("E:\\Test\\Student.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
Student stu1=new Student("tom",24);
oos.writeObject(stu1);
oos.close();
System.out.println("序列化完成");
}
}
class Student implements Serializable {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
反序列化
ObjectInputStream类可将字节序列从文件中读取回来,重构对象
public class FanXuLieHua {
public static void main(String[] args) throws Exception{
InputStream fis=new FileInputStream("E:\\Test\\Student.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Object o=ois.readObject();
Student student=(Student) o;
System.out.println(student.toString());
}
}
泛型
泛型可以使用在集合上,<E>Element:元素 <K,V>Key:键,value:值 <N>Number:数值 <?>:表示不确定类型
泛型可以使用在方法上,<T>Type:类型 T是对参数的描述
泛型可以使用在类或接口上,<T>Type:类型 修饰符 class 类名<T>{}
public class FanXingDemo {
public static void main(String[] args) {
Integer[] arr={1,2,3};
Double[] arr1={1.1,2.2,3.3};
String[] arr2={"a","b","c"};
new Method<Integer>().tostr(arr);
new Method<Double>().tostr(arr1);
new Method<String>().tostr(arr2);
public static <T>void printArr(T[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
class Method<T>{
public void tostr(T[] arr){
System.out.println(Arrays.toString(arr));
}
}
小贴士
流使用完需要用close关闭流
缓冲流的效率高比其他流高
InputStream,Reader,OutputStream,Writer类都是抽象类,不可以创建对象
InputStream是所有字节输入流的父类
OutputStream是所有字符输出流的父类
Reader是读取字符流所有类的父类
Writer是写出字符流所有类的父类
如果文件中的数据和写入的数据的字符集编码不同,就会出现乱码
泛型在类中作用范围是整个类