创建文件
File类
exists():判断是否存在该文件
createNewFile():创建新的文件
mkdir():创建文件夹
mkdirs():创建多层文件夹
isFile():判断是否是文件
getPath():获取文件相对路径
getAbsolutePath():获取文件绝对路径
getName():获取文件名
length():获取文件大小(字节)
//创建文件对象 通过路径
File file = new File("d:/test.txt");
// 会报异常,必须做出处理
try{
if(!file.exists){//判断文件是否存在
file.createNewFile();//不存在创建新文件
}
}catch(IOException e){
e.printStackTrace();
}
File file2 = new File("D:Student/stu/c");
file2.mkdir();//只能创建单层文件夹
file2.mkdirs();//能够创建多层文件夹
IO流
流不释放资源的话会使数据在内存中,文件并不会有改动,一定要关闭流释放资源
输入
方法
read():读取文件内容
close():关闭流,释放资源
-
读取文件内容
- InputStream输入字节流:处理文件
FileInputStream file = null;
try{
//创建输入流的对象 读取的文件是谁
FileInputStream file = new FileInputStream("text.txt");
int b= 0;
while(b=file.read!=-1){//read()返回ASCII表的编码
System.out.println((char)b);//强转成字符
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
file.close();//关闭流,释放资源,如果多个流对象,先用的后释放
}catch(IOExption e){
e.printStackTrace();
}
}
* **Reader输入字符流**:处理文本
``` java
try{
fr = new FileReader("D:/test.txt");
char[] ch = new char[100];
int len = fr.read(ch);
String s = new String(ch, 0, len);
Sysout.out.println(s);
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
缓冲流
```java
try{
//构造方法需要一个Reader类的输入流
br = new BufferedReader(new FileReader("D:/我的青春我做主.txt"));
String s="";
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
sb.append(s+"\n");
}
//StringBuilder类中的替换方法是根据索引来替换,String类中有更好用的replace方法,所以使用toString方法转换成String类型
s=sb.toString().replace("###","sss");
System.out.println(s);
}catch(FileNotException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
输出
方法
write():写入文件内容
close():关闭流,释放资源
-
写入文件内容
- OuputStream输出字节流:处理文件
try {
//第二个参数默认false,重写文件内容,true是追加到其后
fileOutputStream = new FileOutputStream("test.txt",true);
String s = "国庆小长假";
fileOutputStream.write(s.getBytes());//把字符串转化为字节数组的类型,会重写文件内容
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
-
Writer输出字符流:处理文本
- flush():将内存中的数据刷新到文件中去
try{
fw = new FileWrite("D:/我的青春我做主.txt");
fw.write("我的青春我做主");
fw.flush();
}catch(FileNotException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fw.close();
}catch(IOException e){
e.prntStackTrace();
}
}
- 缓冲流和BufferdeReader类似
字节流是8为通用字节流,字符流是16为Unicode字符流
- 字节流转字符流
FileInputStream fis = new FileInputStream("D:/我的青春我做主.txt");
InputStreamReader reader = new InputStreamReader(fis,"编码格式");
//转换后同字符流相同
- 打印输出字符流
PrintWrite pw = new PrintWrite("stu.txt");
pw.println("好好学习");//换行
pw.print("天天向上");//非换行</pre>
序列化和反序列化操作对象
序列化
把Java对象转成二进制字节序列
如果要把对象转为二进制字节序列,需要实现Serializable
序列化多个对象时把对象存放到集合中去序列化
public class User implements Serializable{
}
public class ObjectOutputStreamDemo001{
public static void main(String[] args){
ObjectOutputStream oos = null;
User user = new User();
try{
oos = new ObjectOutputStream(new FileOutputStream("User.txt"));
oos.wriatObject(user);
}catch(FileNotException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
oos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
反序列化
把二进制字节序列转成对象
反序列化集合中的多个对象使用集合存放
public class ObjectInputStreamDemo001{
public static void main(String[] args){
ObjectInputStream oos = null;
User user = null;
try{
ois = new ObjectInputStream(new FileInputStream("User.txt"));
user=ois.readObject(user);
}catch(FileNotException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
ois.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}