File 类的操作
//创建一个文件下的某个文件,先创建文件夹,否则会创建失败
//File 方法调用1.判断目录是否存在,2.创建目录,3.判断文件是否存在,4.删除文件 5.创建文件
//6列出目录下所有文件名称 6.得到目录下所有文件url
File fdir = new File("C:\\Users\\Administrator\\Desktop"+File.separator+"basic");
if(fdir.isDirectory()){
System.out.println("is directory");
}else{
System.out.println("is not directory,mkdir");
fdir.mkdir();
}
File ftxt1 = new File("C:\\Users\\Administrator\\Desktop"+File.separator+"basic"+File.separator+"ftxt1.txt");
if(ftxt1.exists()){
System.out.println("ftxt1 is exists");
//ftxt1.delete();
}else{
try {
System.out.println("ftxt1 is not exists,creat");
ftxt1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String[] fStrs=fdir.list();
for(int i=0;i<fStrs.length;i++){
System.out.println(fStrs[i]);
}
File[] files = fdir.listFiles();
for(File f:files){
System.out.println(f);
}
RandomAccessFile类
之前的File类只是针对文件本身进行操作的,而如果相对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机的读取一个文件中指定位置的数据。因为在文件中,所有得内容都是按照字节存放的,都有固定的保存位置。
public static void randomAccessFormText() throws IOException{
File file = new File("C:\\Users\\Administrator\\Desktop"+File.separator+"basic"+File.separator+"ftxt2.txt");
RandomAccessFile rf = new RandomAccessFile(file, "rw");
String name1 = "肖";
int age1 = 10;
String name2="tto";
int age2 = 26;
rf.writeUTF(name1);
rf.writeInt(age1);
rf.writeBytes(name2);
rf.writeInt(age2);
rf.close();
RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.skipBytes(9);
byte[] bs = new byte[3];
for(int i=0;i<bs.length;i++){
bs[i] = raf.readByte();
}
String n2 = new String(bs);
int ag2 = raf.readInt();
System.out.println(n2+"\t"+ag2);
raf.seek(0);
System.out.println(raf.readUTF()+"\t"+raf.readInt());
}
字节流字符流
public static void fileInputOutput() throws IOException{
//写入 字节流
File file = new File("C:\\Users\\Administrator\\Desktop"+File.separator+"basic"+File.separator+"ftxt2.txt");
OutputStream os = new FileOutputStream(file,true);
String s = "Hello word";
os.write(s.getBytes());
os.close();
//读取 字节流
InputStream is = new FileInputStream(file);
byte[] bt = new byte[(int)file.length()];
is.read(bt);
//System.out.println(new String(bt));
is.close();
//写入 字符流
Writer writer = new FileWriter(file,true);
String s1 = "Jone";
writer.write(s1);
//不关闭拼不上
writer.close();
//读出字符流
Reader reader = new FileReader(file);
char[] c = new char[1024];
int len = 0;
int temp = 0;
while((temp=reader.read())!=-1){
c[len] = (char)temp;
len++;
}
System.out.println(new String(c));
}
把一个文件里的内容拷贝到另一个文件
public static boolean copyFile(File srcFile, File destFile) {
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(srcFile);
fo = new FileOutputStream(destFile);
in = fi.getChannel();//得到对应的文件通道
out = fo.getChannel();//得到对应的文件通道
in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ByteArrayInputStream 和ByteArrayOutputStream
之前所讲解的程序中,输出和输入都是从文件中来得,当然,也可以将输出的位置设置在内存之上,此时就要使用ByteArrayInputStream、ByteArrayOutputStream来完成输入输出功能了, ByteArrayInputStream的主要功能将内容输入到内存之中, ByteArrayOutputStream的主要功能是将内存中的数据输出, 优点:缓存 ,得到数据后可以不仅用来输出到硬盘,也可以到 显卡 。 此时应该把内存作为操作点.
ByteArrayInputStream和ByteArrayOutputStream
String str="HELLO WORlD!!!";
InputStream input=new ByteArrayInputStream(str.getBytes());
OutputStream output=new ByteArrayOutputStream();
int temp=0;
while((temp=input.read())!=-1){
output.write(Character.toLowerCase(temp));
}
input.close();
output.close();
System.out.println(output.toString());