File类中的常用方法有哪些?
1.String getName() :获取文件名称
2.String getPath():获取文件路径
3.String getAbsolutePath():获取绝对路径
4.File getParentFile():获取上级目录文件
5.boolean exists():判断文件是否存在
6.boolean isFile() :是否是文件
7.boolean isDirectory():判断是否是目录
8.boolean delete() :删除文件
9.boolean mkdirs():创建当前目录和上级目录
10.File[] listFiles() :列出所有文件对象
中文乱码问题是怎么造成的? 如何解决?
编码使用的字符集和解码使用的字符集不相同就会造成乱码
解决方法:将解码后的乱码字符串重新使用该字符集重新进行编码,再使用对应的字符集进行解码
//编码
String str="中国人";
byte[] bytes = str.getBytes("UTF-8");
System.out.println(Arrays.toString(bytes));
//解码
String s = new String(bytes,"ISO-8859-1");//数组,字符集
System.out.println(s);
//乱码byte[] bytes2 = s.getBytes("ISO-8859-1");//将错误的解码方式后的错误字符 重新编码回去String s2 = new String(bytes2,"UTF-8");//数组,字符集System.out.println(s2);
什么是读? 什么是写?
读(read):将磁盘上的数据读取到内存中,能操作文件中的数据,对内存来说是输入操作,一次读一个字节,读到没有数据是返回-1
//创建数据源File f = new File("file1/a.txt");//创建流对象FileInputStream fil = new FileInputStream(f);
//读StringBuilder sb = new StringBuilder(10);/while((data= fil.read())!=-1){//System.out.println((char)data);//转成字符sb.append((char)data);System.out.println(sb);//关闭资源fil.close();
写(write):将内存中的数据写到内存当中去,能操作文件中的数据,对内存来说是输出操作
//读取文件
File f = new File("file1/b.txt");
FileOutputStream fos = new FileOutputStream(f);//抛异常
//一次写一个字符
fos.write(68);
fos.write('F');
fos.write("KJHL".getBytes());//字符串转字符
六字箴言:读进来,写出去
字节流和字符流的区别是什么? 开发中如何选择?
字节流:由字节组成,可以用于任何对象,InputStream和OutputStream,主要操作二进制文件
字符流:由多个字符组成,用于处理字符类型的数据,Reader和Writer,主要操作文本文件
字节流和字符流完成读写的步骤是什么?
1.创建源或者目标对象
输入操作:将文件中的数据流向程序中
输出操作:将程序中的数据流向文件中
2.创建IO流对象,
输入操作:创建输入流对象
输出操作:创建输出流对象
3.具体的IO流操作
输入操作:输入流对象的read方法
输出操作:输出流对象的writer方法
4.关闭数据源
输入操作:输入流对象.close()
输出流操作:输出流对象.close()
缓冲流有什么特点?
比节点流更加高级,有装饰设计模式,他可以将默认的数组全部填写完成后再写出去
四大基流的包装流:
字节缓存 流:BufferedOutputStream,BufferedInputStream字符缓存流:BufferedRead,BufferedWrite
什么是序列化和反序列化?
序列化:将java的对象数据转成二进制并持久的保存在磁盘中,使用ObjiectOutputStream方法做序列化操作
反序列化:将磁盘中存储的二进制对象恢复成java对象,使用ObjiectInputStream方法做反序列操作
解决反序列化版本不一致的方法在类中提供一个固定的SerialVersionUID
class User implements Serializable {private static final long serialVersionUID = 1L;//TODO
}