一.io输入与输出..键盘对应i(输入),显示器对应o(输出)
1.file 不是文件的内容,代表磁盘文件本身信息的类 ,file类定义了一些与平台无关的方法来操作文件
如:增删该
2.分隔符:Unix中(/)、Dos(/),java可以处理Unix和Dos的路径分隔符
如:下例;
import java.io.File;
import java.util.Date;
public class FileTest {
public static void main(String[] args) {
File f=new File("1.txt");
//文件存在
try {
if (f.exists()) {
f.delete();//删除
}
else {
//穿件一个文件
f.createNewFile();
}
} catch (Exception e) {
e.printStackTrace();
}
//文件名
System.out.println("Filename"+f.getName());
//路径
System.out.println("Filepath"+f.getPath());
//绝对路径
System.out.println(f.getAbsolutePath());
//父路径..就是上一级的路径,如果没有返回null
System.out.println(f.getParent());
//文件是否存在
System.out.println(f.exists()?"exit":"not exist");
//文件是否可读
System.out.println(f.canRead()?"read":"not read");
//文件是否是目录
System.out.println(f.isDirectory()?"directory":"not directory");
//取出文件的修改时间。是long类型,打印的是长类型
System.out.println(f.lastModified());
//转换格式
System.out.println(new Date(f.lastModified()) );
}
}
二.RandomAccessFile类提供了许多文件访问方法,RandomAccessFile类支持“随机访问”方式,可以从任意一个位置开始读取文件...,指示器,可以跳到文件的任何一个位置,移到一个新的位置,,他就会从新的位置开始读取。。
在使用流的方式的时候,,必须安顺有序,一个字节一个字节的读取,,。。。随机读取,。可以跳转,
等长格式。。如:一条条的学生记录。。每条记录信息的内容长度一样。。。在信息中又可以分为若干字段。
可以跳转到某个员工的姓名处,读取很方便
RandomAccessFile类仅限于操作文件。。不能访问其他的io设备,。。RandomAccessFile类有两种构造方法:
new RandomAccessFile(f,"r w");//读写方式
RandomAccessFile(f,"r"); //只读方式
如:
import java.io.RandomAccessFile;
public class RandomFileTest {
public static void main(String[] args) {
// //不能用字节的方式写入姓名,,,应该用字符的方式写入
// Employee e1=new Employee("zhangsan", 238);
// Employee e2=new Employee("lisi", 24);
// Employee e3=new Employee("wangwu", 25);
//
// try {
// RandomAccessFile ra=new RandomAccessFile("emploee.txt", "rw");
// ra.write(e1.name.getBytes());
// ra.writeInt(e1.age);//写入一个直接,如果年龄很大大于一个字节,
// //内容就会丢失
// ra.write(e2.name.getBytes());
// ra.writeInt(e2.age);
//
// ra.write(e3.name.getBytes());
// ra.writeInt(e3.age);
// //关闭
// ra.close();
//
//
// byte[] buf=new byte[Employee.LEN];
// String strName;
// int len;
// //读取的时候重新从创建
// RandomAccessFile raf=new RandomAccessFile("emploee.txt","r");
// raf.skipBytes(Employee.LEN+4);//读取12个字节
// len=raf.read(buf);//读取文件中几个字节,最多可以读取八个字节
// //转换为字符串
// strName=new String(buf,0,len);
// //trim(),去掉空格
// System.out.println(strName.trim()+":"+raf.readInt());
//
// //seek绝对定位
// raf.seek(0);
// /*
// * 读取第一个员工
// */
// len=raf.read(buf);
// strName=new String(buf,0,len);
// System.out.println(strName.trim()+":"+raf.readInt());
//
// //读取第三个员工
// raf.skipBytes(Employee.LEN+4);
// len=raf.read(buf);
// strName=new String(buf,0,len);
// System.out.println(strName.trim()+":"+raf.readInt());
// raf.close();
// } catch (Exception e) {
// e.printStackTrace();
// }
//可以用中文
Employee e1=new Employee("张三", 238);
Employee e2=new Employee("lisi", 24);
Employee e3=new Employee("wangwu", 25);
try {
RandomAccessFile ra=new RandomAccessFile("emploee.txt", "rw");
ra.writeChars(e1.name);
ra.writeInt(e1.age);//写入一个直接,如果年龄很大大于一个字节,
//内容就会丢失
ra.writeChars(e2.name);
ra.writeInt(e2.age);
ra.writeChars(e3.name);
ra.writeInt(e3.age);
//关闭
ra.close();
String strName="";
//读取的时候重新从创建
RandomAccessFile raf=new RandomAccessFile("emploee.txt","r");
raf.skipBytes(Employee.LEN*2+4);//读取12个字节
//trim(),去掉空格
for(int i=0;i<Employee.LEN;i++)
{
strName+=raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());
//seek绝对定位
raf.seek(0);
// 读取第一个员工
strName="";
for(int i=0;i<Employee.LEN;i++)
{
strName+=raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());
//读取第三个员工
raf.skipBytes(Employee.LEN*2+4);
strName="";
for(int i=0;i<Employee.LEN;i++)
{
strName+=raf.readChar();
}
System.out.println(strName.trim()+":"+raf.readInt());
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}