目录
一 文件
文件:文件就是保存数据的地方 可以保存一张图片 也可以保存一个文本或者视频
文件流:文件在程序中是以流的形式操作的
输入流:数据从数据源(文件)到程序(内存)的路径
输出流:数据从程序(内存)到数据源(文件)的路径
二 常用文件操作
创建文件
File是文件类 我们先来看看它的构造方法 对于java程序员来说必然得会查询API文档
可能看着比较抽象(我第一遍也是这个感觉) 接下来做个示例就很好理解了 注释已经很清晰了
//第一种通过File(String pathname)
@Test
public void test01(){
//路径
String FilePath = "d:\\5.txt";
//初始化文件
File file = new File(FilePath);
try {
//真实创建文件
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test02(){
//File(String parent, String child)
String filepath= "d:\\";//父路径名字字符串+子路径名字字符串
//初始化文件
File file1 = new File(filepath, "6.txt");
try {
file1.createNewFile();
}
catch (IOException e){
}
}
@Test
public void test03(){
// File(File parent, String child)
//初始化父文件
File file = new File("d:\\");
//子路径
String ChildPath = "7.txt";
File file1 = new File(file,ChildPath);
try {
file1.createNewFile();
}
catch(IOException e){
}
}
获取文件(目录)信息
这个确实没什么技术含量 知道就行了
File file = new File("d:\\news1.txt");
//调用相应的方法 得到对应的信息
System.out.println("文件名"+file.getName());
System.out.println("绝对路径"+file.getAbsolutePath());
System.out.println("文件父级目录"+file.getParent());
System.out.println("文件大小"+file.length());
System.out.println("文件是否存在"+file.exists());
System.out.println("是不是一个文件"+file.isFile());
System.out.println("是不是一个目录"+file.isDirectory());
System.out.println("是不可读"+file.canRead());
目录的操作和文件删除
文件删除
File file = new File("d:\\11.txt");
try {
file.createNewFile();
}
catch (IOException e){
}
if(file.exists()){
if(file.delete()){
System.out.println("文件删除成功");
}
else{
System.out.println("文件删除失败");
}
}
else {
System.out.println("不存在该文件");
}
创建目录
public class exercise01 {
public static void main(String[] args) {
String path = "d:\\11.txt";
File file = new File(path);
if(file.exists()){
System.out.println("该文件目录已经存在");
}
else{
if(file.mkdirs()){
System.out.println("目录创建成功");
}
else{
System.out.println("目录创建失败");
}
}
}
}
目录和文件都是一个类下的 目录相当于文件夹 文件就是普通的文件
三 IO流原理以及分类
Java IO流原理
1.I/O是Input/Output的缩写 I/O技术是非常实用的技术 用于处理数据传输 如读写文件 网络通讯
2.java程序中 对于数据的输入/输出是以流(stream)的方式进行
3.java.io包下提供了各种流类接口 用于获取不同种类的数据 并通过方法输入或输出数据
4.输入input 读取外部数据(磁盘 光盘)到程序内存中
5.输出output 将程序(内存)数据输出到磁盘光盘等存储设备中
流的分类
1.按操作数据单位不同分为 字节流(8 bit)和字符流
字节流擅长处理二进制文件
字符流擅长处理文本文件
2.按数据流的流向不同分为输入流和输出流
3.按流的角色不同分为节点流和 处理流
字节流
ImputStream抽象类是所有类字节输入流的超类
FileInputStream
单字节读
@Test
public void method1() throws IOException {
String filepath="d:\\5.txt";
//输入流 读
FileInputStream fileInputStream = null;
int readfile = 0;
try {
//创建一个输入流对象
fileInputStream=new FileInputStream(filepath);
while ((readfile=fileInputStream.read())!=-1){//等于-1时说明已经读取完成
System.out.print((char)readfile);//readfile返回的是字节的asc||值
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
fileInputStream.close();
}
}
字节数组读
public void method2() throws IOException {
String filepath="d:\\5.txt";
//输入流 读
FileInputStream fileInputStream = null;
int readlen = 0;
byte[] buf = new byte[8];
try {
//创建一个输入流对象
fileInputStream=new FileInputStream(filepath);
while ((readlen=fileInputStream.read(buf))!=-1){//等于-1时说明已经读取完成
System.out.print(new String(buf,0,readlen));//readfile返回的是字节的asc||值
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
fileInputStream.close();
}
}
FileOutPutStream
public class FileOutPutStream01 {
public static void main(String[] args) {
}
@Test
public void writeFile(){
//创建对象
String filePath = "d:\\luorifeiche.txt";
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(filePath,true);
fileOutputStream.write('a');
String str = "hello";
//str.getBytes() 可以把字符串转成一个字节数组
fileOutputStream.write(str.getBytes());
//截取字符串加入
fileOutputStream.write(str.getBytes(),1,4);
//我们希望追加而不是覆盖 这样设置就可以
//fileOutputStream = new FileOutputStream(filePath,true);
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流
FileReader
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Writer;
/**
* @author shijiu
*/
public class FileReader01 {
public static void main(String[] args) {
}
@Test
public void read01(){
String filePath = "d:\\story.txt";
FileReader fileReader = null;
int data= 0;
//1。创建一个FileReader对象
try {
fileReader=new FileReader(filePath);
//单个字符 循环读取
while((data=fileReader.read())!=-1){
System.out.print((char) data);
}
} catch (IOException e) {
}finally {
if(fileReader!=null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void read02(){
String filePath = "d:\\story.txt";
FileReader fileReader = null;
int readlen;
char[] buf = new char[8];
//1。创建一个FileReader对象
try {
fileReader=new FileReader(filePath);
//单个字符 循环读取
while((readlen=fileReader.read(buf))!=-1){
System.out.print(new String(buf,0,readlen));
}
} catch (IOException e) {
}finally {
if(fileReader!=null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
FileWriter
public static void main(String[] args) {
String filePath = "d:\\note.txt";
//创建一个FileWriter对象
FileWriter fileWriter =null;
char[] chars={'a','b','c'};
try {
fileWriter = new FileWriter(filePath,true);
fileWriter.write('H');
fileWriter.write(chars);
fileWriter.write("韩顺平",0,2);
fileWriter.write("你好背景");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
有些地方看不懂可以查询api或者开启debug模式