1. 输入输出文件
文件操作API:File类 操作文件与目录
字符流 - 读取 -》 文本文件(二进制): Reader类、Writer类 (内容的维护)
字节流 - 读取 --》二进制文件:InputStream类、OutputStream类 (内容的维护)
File类
Pathname: 文件名(路径)
URI: http://www.baidu.com/index.txt
查看一个目录下的所有文件:
File file=new File("d:"+File.separator);
String[] files=file.list();
for (String name:files) {
File file1=new File("d:\\"+name);
if(file1.isDirectory())
System.out.println("{"+name+"}");
else
System.out.println(name);
}
list()返回文件目录字符串列表
isDirectory() 是否为目录
在这里插入代码片
file1.renameTo(new File("d:\\Test\\"+"dts"+name)); //修改名字
file1.delete(); //不能删除非空目录
二进制文件: InputStrem,OutputStream类
内容输出到文件:
File file=new File("d:"+ File.separator+"Test\\"+"dts.txt");
try {
OutputStream outputStream=new FileOutputStream(file,true);
System.out.println("请输入(退出):");
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
while (!s.equals("退出")) {
outputStream.write(s.getBytes());
s=scanner.next();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
outputStream.write('d'); //写入字符
文件读取
通过string方法输出
InputStream的read()方法:
代码:
File file=new File("d:"+ File.separator+"Test\\"+"dts.txt");
try {
InputStream inputStream=new FileInputStream(file);
byte[] bytes=new byte[1024];
int position=-1;
while ((position=inputStream.read(bytes)) > -1){
//bytes 有1024个空间,有效数据未必是1024
System.out.println(new String(bytes,0,position,"gb2312"));
}
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream 类的主要方法
• int read( ):一次读取一个字节,读到文件末尾返回-1.
• int read(byte[] b):一次读取字节数组长度的字符,批量读取提高读取效率.
• void close( ):关闭输入流子类
FileInputStream常用的构造方法
• FileInputStream(File file)如果文件不存在则抛出异常FileNotFoundException为兼容读取含中文的文本文件,应指定字符集,应配合: InputStreamReader类
复制文件
File file=new File("d:"+ File.separator+"Test\\"+"dts.txt");
byte[] bytes=new byte[1024];
try {
InputStream inputStream=new FileInputStream(file);
int position=-1;
while ((position=inputStream.read(bytes)) > -1){
//bytes 有1024个空间,有效数据未必是1024
System.out.println(new String(bytes,0,position,"gb2312"));
}
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
OutputStream outputStream=new FileOutputStream("d:"+ File.separator+"Test\\"+"dts1.log");
outputStream.write(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
字符流
字符流跟字节流用法基本一致
何时使用字符流,何时使用字节流?依据是什么?
• 使用字符流的应用场景: 如果是读写字符数据的时候
则使用字符流。
• 使用字节流的应用场景: 如果读写的数据都不需要转
换成字符的时候,则使用字节流。如:图片、音乐、电
影、数据库备份、office文档。
·字符流的缓冲区 BufferedWriter类