1.java.io包下
File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源。
File file1 = new File(“d:\io\helloworld.txt”);
File file2 = new File(“d:\io\io1”);
1.File既可以表示一个文件(.doc .xls .mp3 .avi .jpg .dat),也可以表示一个文件目录!
2.File类的对象是与平台无关的。
3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作。如果涉及到访问文件的内容,File
是无能为力的,只能使用IO流下提供的相应的输入输出流来实现。
4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!
/*
*File:是文件和目录的一种抽象的表示;
*File:操作文件的一些属性:文件名,文件目录,文件大小,文件修改时间等。
*File file=new File(“e:\test.txt”);
*“e:\test.txt”:可能是单个文件,也可能是目录;
*
两种写法:
*File file=new File(“e:\a\b\c\test.txt”);
*File file=new File(“e:/a/b/c/test.txt”);
*
*/
public class Test {
public static void main(String[] args) {
File file=new File("e:\\test.txt");
System.out.println(file.exists());//文件是否存在;
System.out.println(file.isDirectory());//是目录吗;
System.out.println(file.isFile());//是单个文件吗;
System.out.println(file);//文件全路径信息;
System.out.println(file.getName());//只显示文件名信息,不包含路径信息;
System.out.println(file.getAbsolutePath());//文件全路径信息;
System.out.println(file.lastModified());//文件最后修改时间,毫秒值;
System.out.println(new Date(file.lastModified()).toLocaleString());//文件最后修改时间,毫秒值;));//文件最后修改时间,毫秒值;
System.out.println(file.length());//只显示文件名信息,不包含路径信息;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
}
/*
*file.renameTo(new File(“e:\d\a.txt”)):相当于移动和重命名文件;
*条件:上层目录要给准备好。
包装类*4.包装类相比于其它类,有一个显著的特点:
自动装箱和自动拆箱
Integer n3=1234;//自动装箱;基本数据类型—>引用数据类型;隐式调用Integer n3=new Integer(1234);
int i=n3+10;//自动拆箱;引用数据类型—>基本数据类型;隐式调用n3.intValue();
//Integer和字符串类型的相互转换;
String str=“123”;//字符串必须是数字格式的,否则会报异常: java.lang.NumberFormatException。
int a=Integer.parseInt(str);
System.out.println(a+10);
int b=98;
String str1=String.valueOf(b);
System.out.println(str1);
*StringBuffer和StringBuilder:
1
2
3
4
*1.方法相同,可以替换;
*2.StringBuffer早期版本的,StringBuilder后来版本的(jdk1.5);
*3.StringBuffer重安全,轻效率;StringBuilder重效率,轻安全;
StringBuffer:synchronized,线程同步;
StringBuilder:没有synchronized,线程非同步;
*4.建议用StringBuilder。
2.IO 流的结构
在这里插入代码片
1
3.IO流的划分
按照流的流向的不同:输入流 输出流 (站位于程序的角度)
按照流中的数据单位的不同:字节流 字符流 (纯文本文件使用字符流 ,除此之外使用字节流)
InputSterame outputSterame
InputStreamReader和OutputStreamWriter
思路:先把文件从硬盘读到程序里,再从程序里写出到另一个文件。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestCopy {
public static void main(String[] args) throws IOException {
//1.指定数据源;
File file=new File("e:/a.txt");
//2.搭建输入流管道;
InputStream is=new FileInputStream(file);
//3.指定目的地;
File file1=new File("e:/b.txt");
//4.搭建输出管道;
OutputStream os=new FileOutputStream(file1);
//5.用管道功能;
int b=0;
//边读边写;
while((b=is.read())!=-1){
os.write(b);
}
//6.关闭流;
is.close();
os.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
reader writer
BufferedReader和BufferedWriter
/*
*输出流: close();1.关闭流;2.刷新缓冲区;
* flush();刷新缓冲区;
*
*
*
*/
public class TestCopy {
public static void main(String[] args) throws IOException {
File file=new File("e:/a.txt");
Reader reader=new FileReader(file);
File file1=new File("e:/b.txt");
Writer writer=new FileWriter(file1);
char[] cbuf=new char[4];
int len=0;
while((len=reader.read(cbuf))!=-1){
writer.write(cbuf, 0, len);
}
writer.flush();
reader.close();
writer.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
按照流的角色的不同:节点流 处理流 (流直接作用于文件上是节点流(4个),除此之外都是处理流)
4.重点掌握
抽象基类节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率)
InputStream FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b))
OutputStreamFileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len))
ReaderFileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine()
WriterFileWriter (void write(c,0,len))BufferedWriter (flush()) (void write(c,0,len)或void write(String str))
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestCopy2 {
public static void main(String[] args) throws IOException {
//创建数据源;
File file=new File("e:/1.jpg");
//搭建管道;
InputStream is=new FileInputStream(file);
BufferedInputStream bis=new BufferedInputStream(is);
//创建数据源;
File file1=new File("e:/2.jpg");
//搭建管道;
OutputStream os=new FileOutputStream(file1);
BufferedOutputStream bos=new BufferedOutputStream(os);
//边读边写;
int b=0;
long startTime=System.currentTimeMillis();
while((b=bis.read())!=-1){
bos.write(b);
}
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
bis.close();
bos.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
注: 1.从硬盘中读入一个文件,要求此文件一定得存在。若不存在,报FileNotFoundException的异常
2.从程序中输出一个文件到硬盘,此文件可以不存在。若不存在,就创建一个实现输出。若存在,则将已存在的文件覆盖
3.真正开发时,就使用缓冲流来代替节点流
4.主要最后要关闭相应的流。先关闭输出流,再关闭输入流。将此操作放入finally
1
2
3
4
5
5.其它的流
1.转换流:实现字节流与字符流之间的转换
InputStreamReader:输入时,实现字节流到字符流的转换,提高操作的效率(前提是,数据是文本文件) ===>解码:字节数组--->字符串
OutputStreamWriter:输出时,实现字符流到字节流的转换。 ===>编码: 字符串---->字节数组
1
2
3
例子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。
2.标准的输入输出流
System.in: The "standard" input stream:从键盘输入数据
System.out:The "standard" output stream:从显示器输出数据
1
2
3
3.打印流 (都是输出流) PrintStream(处理字节) PrintWriter(处理字符)
可以使用System.setOut(PrintStream p)重新设置一下输出的位置。
PrintStream p = new PrintStream(new FileOutputStream(“hello.txt”),true);
4.数据流(处理基本数据类型、String类、字节数组)(了解即可)
DataInputStream DataOutputStream
5.对象流(用来处理对象的)
>对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,
或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
1
2
3
ObjectInputStream(Object readObject();)
ObjectOutputStream (void writeObject(Object obj))
如何创建流的对象:
1
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream(new File(“person.txt”)));
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream(new File(“person.txt”)));
实现序列化机制的对象对应的类的要求:
1
①要求类要实现Serializable接口
②同样要求类的所有属性也必须实现Serializable接口
③ 要求给类提供一个序列版本号:private static final long serialVersionUID;
④属性声明为static 或transient的,不可以实现序列化
/*
*1.User类就实现Serializable接口—》可以以二进制流的形式写入硬盘—》序列化;
从硬盘上读出来,把二进制流还原成对象信息—》反序列化;
否则会报错:;;;;;;;;;;;;;;
java.io.NotSerializableException: com.sxt.io.objectio.User
*/
public class User implements Serializable {
private String userName;
private String password;
public User() {
// TODO Auto-generated constructor stub
}
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [userName=" + userName + ", password=" + password + "]";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
}
// 写到文件里
public class TestObjectOutputStream {
public static void main(String[] args) throws IOException {
File file=new File("e:/f.data");
OutputStream os=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(os);
User user=new User("Ada","123456");
oos.writeObject(user);
oos.close();
}
}
//读进来;
public class TestObjectInputStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file=new File("e:/f.data");
InputStream is=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
User user=(User)ois.readObject();
ois.close();
System.out.println(user);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
6.随机存取文件流:RandomAccessFile
6.1既可以充当一个输入流,又可以充当一个输出流:public RandomAccessFile(File file, String mode)
6.2支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。
6.3 支持任意位置的“插入”。
1
2
3
4
5
/*
*基本数据类型包装流:写进去是什么类型,读出来就是什么类型;保持的是数据类型不变。
*
*1.一定是先写后读;
* DataOutputStream:写;
* DataInputStream:读;
*
*2.读写顺序要一致;否则会出错或数据错误;java.io.EOFException,end of file;
*
*/
public class Test {
public static void main(String[] args) throws IOException {
File file=new File("e:/f.data");
OutputStream os=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(os);
int n=5;
dos.writeInt(n);
dos.writeDouble(3.14);
dos.writeBoolean(true);
dos.writeUTF("战狼2");
InputStream is=new FileInputStream(file);
DataInputStream dis=new DataInputStream(is);
int n1=dis.readInt();
double d1=dis.readDouble();
boolean b1=dis.readBoolean();
String str1=dis.readUTF();
System.out.println(n1);
System.out.println(d1);
System.out.println(b1);
System.out.println(str1);
dis.close();
dos.close();
}
}
---------------------
作者:閫嗛
来源:CSDN
原文:https://blog.csdn.net/weixin_44701192/article/details/93653916
版权声明:本文为博主原创文章,转载请附上博文链接!