new File(String pathname) //根据路劲创建一个File对象
new File(File parent, String child) //根据父目录文件+子路劲构建
new File(String parent,String chile) //根据父目录+子路径构建
使用createNewFile()创建新文件
- //方式一 new File(String pathname)
- @Test
- public void create1(){
- String filePath = "d:\\news3.txt";
- File file = new File(filePath);
- try {
- file.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- System.out.println("创建成功");
- }
- //方式二 new File(File parent, String child)
- @Test
- public void create2(){
- File parentFile = new File("e:\\");
- String fileName= "news.txt";
- File file = new File(parentFile,fileName);
- try {
- file.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //方法三 new File(String parent,String chile)
- @Test
- public void create3(){
- String parentPath = "e:\\";
- String fileName = "news3.txt";
- File file = new File(parentPath,fileName);
- try {
- file.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Test
- public void info(){
- //先创建文件对象
- File file = new File("d:\\news.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());
- }
- @Test
- public void m1() {
- //判断文件是否存在,存在就删除
- String filePath = "d:\\news1.txt";
- File file = new File(filePath);
- if (file.exists()) {
- if (file.delete()) {
- System.out.println("删除成功");
- } else {
- System.out.println("删除失败");
- }
- } else {
- System.out.println("该文件不存在");
- }
- }
-
- @Test
- public void m2() {
- //判断文件目录,存在就删除 , 在java中,目录也被当成文件
- String filePath = "d:\\demo";
- File file = new File(filePath);
- if (file.exists()) {
- if (file.delete()) {
- System.out.println("删除成功");
- } else {
- System.out.println("删除失败");
- }
- } else {
- System.out.println("该目录不存在");
- }
- }
-
- @Test
- public void m3() {
- //判断文件目录是否存在,不存在就创建
- String filePath = "d:\\demo";
- File file = new File(filePath);
- if (file.exists()) {
- System.out.println("该目录不存在");
- } else {
- if (file.mkdir()) { //创建多级目录使用 mkdirs
- System.out.println("创建成功");
- }else{
- System.out.println("创建失败");
- }
- }
- }
输入input:读取外部数据(磁盘,光盘等存储设备的数据)到程序(内存)中
输出output:将程序(内存) 数据输出到磁盘、光盘等存储设备中
按操作数据单位不同分为:字节流(8 bit) 二进制文件,字符流(按字符)文本文件
抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
- @Test
- public void readFile01() {
- String filePah = "d:\\news123.txt";
- int readData = 0;
- FileInputStream fileInputStream = null;
- try {
- //创建 FileInputStream 对象 用于读取 文件
- fileInputStream = new FileInputStream(filePah);
- //返回-1,表示读取完毕
- while ((readData = fileInputStream.read()) != -1) {
- System.out.print((char) readData); //转成char显示
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- //关闭文件流,释放资源
- try {
- fileInputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- /**
- * 演示读取文件。。。
- * 单个字节的读取,效率比较低
- * ->使用read(byte[] b ) 读取提高效率
- * new String(buf,0,buf.length) 第一个参数为char数组,第二个参数开始位置,第三个参数为结束位置
- */
- @Test
- public void readFile02() {
- String filePah = "d:\\news123.txt";
- int readLen = 0;
- //定义字节数组
- byte[] buf = new byte[8]; //一次读取8个字节
- FileInputStream fileInputStream = null;
- try {
- //创建 FileInputStream 对象 用于读取 文件
- fileInputStream = new FileInputStream(filePah);
- //返回-1,表示读取完毕
- while ((readLen = fileInputStream.read(buf)) != -1) {
- System.out.println(new String(buf,0,buf.length));
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- //关闭文件流,释放资源
- try {
- fileInputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
注意:如果写的文件不存在它会自动创建
- /**
- * 演示OutputStream 将数据写道文件中
- * 如果该文件不存在,则创建
- */
- @Test
- public void writeFile(){
- //创建FileOutputStream对象
- String filePath = "d:\\news123.txt";
- FileOutputStream fileOutputStream = null;
-
- try {
- //new FileOutputStream(filePath); 会覆盖原来的内容
- //new FileOutputStream(filePath,true); 创建方式时追加到文件后面
- fileOutputStream = new FileOutputStream(filePath,true);
- //写入一个字节
- // fileOutputStream.write('H');//写入一个a试试
- //写入字符串
- String str = "hello,world";
- // //str.getByes转化为字符数组
- // fileOutputStream.write(str.getBytes()); //方法一
- fileOutputStream.write(str.getBytes(),0,str.length());
- } catch (IOException e) {
- e.printStackTrace();
- }finally {
- try {
- fileOutputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- @SuppressWarnings({"all"}) //取消文件警告
- public class Hello {
- public static void main(String[] args) {
- String oldFilePah = "d:\\avatar.jpg";
- String newFilePah = "d:\\avatar(1).jpg";
- int readLen = 0;
- byte[] buf = new byte[1024];
- FileOutputStream fileOutputStream = null;
- FileInputStream fileInputStream = null;
- try {
- fileInputStream = new FileInputStream(oldFilePah);
- fileOutputStream = new FileOutputStream(newFilePah);
- while ((readLen = fileInputStream.read(buf)) != -1){
- fileOutputStream.write(buf,0, readLen);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fileInputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- fileOutputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- @Test
- /**
- * 单个字符读取
- */
- public void readFile1(){
- String filePath = "d:\\news123.txt";
- int data = ' ';
- FileReader fileReader = null;
- try {
- fileReader = new FileReader(filePath);
- while ((data = fileReader.read()) != -1){
- System.out.print((char) data);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fileReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- @Test
- /**
- * 多个字符的读取
- */
- public void readFile2(){
- String filePath = "d:\\news123.txt";
- char[] buf = new char[8];
- int readLen = 0;
- FileReader fileReader = null;
- try {
- fileReader = new FileReader(filePath);
- //循环读取 使用read(buf),返回的时实际读取到的字符数
- //如果返回-1,说明文件结束
- while ((readLen = fileReader.read(buf)) != -1){
- System.out.print(new String(buf,0,readLen));
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fileReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
注意:new FileWriter(File/String,true) //表示追加 new FileWriter(File/String) //表示覆盖
- @Test
- public void writeFile(){
- String filePath = "d:\\news123.txt";
- String str = "风雨之后,定见彩虹";
- FileWriter fileWriter = null;
- try {
- fileWriter = new FileWriter(filePath); //直接覆盖
- fileWriter = new FileWriter(filePath,true); //追加
- fileWriter.write(str,0,str.length());
- //在数量大的时候使用循环
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fileWriter.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- //创建bufferedReader
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
- //读取
- String line;// bufferedReader.readLine(); 按行读取效率高
- //当返回null的时候表示读取完毕
- while ((line = bufferedReader.readLine())!= null){
- System.out.print(line);
- }
- //关闭流,只需要关闭外层流
- bufferedReader.close();
- }
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- //创建BufferedWriter FileWriter(filePath) ,第二个参数表示是否追加
- BufferedWriter bufferedWriter= new BufferedWriter(new FileWriter(filePath));
- bufferedWriter.write("hello,张三");
- bufferedWriter.newLine();//插入一个换行符
- bufferedWriter.close();
- }
- //文件的拷贝
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- String filePath2 = "d:\\news456.txt";
- String line;
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
- BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath2));
- while ((line = bufferedReader.readLine()) != null){
- bufferedWriter.write(line);
- }
- bufferedReader.close();
- bufferedWriter.close();
- }
- //文件的拷贝
- //字节流可以操作二进制文件(图片,视频),可以操作文本文件
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- String filePath2 = "d:\\news456.txt";
-
- BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
- BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(filePath2));
-
- byte[] buff = new byte[1024];
- int readLen = 0;
- while ((readLen = bufferedInputStream.read(buff)) != -1){
- bufferedOutputStream.write(buff,0,readLen);
- }
-
- bufferedInputStream.close();
- bufferedOutputStream.close();
- }
序列化和反序列化:序列化就是在保存数据时,保存数据的值和数据类型。反序列化就是在恢复数据时,恢复数据的值和数据类型。要支持序列化需要实现Serializable//标记接口(用这个) Externailzable(这恶鬼不常用)
- public static void main(String[] args) throws IOException {
- //序列化后,保存的文件格式,不是存文本,而是按照他的格式来保存
- String filePath = "d:\\news12.dat";
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
- //序列化数据到 d:\\news12.dat
- oos.write(100); //int --- Integer (实现 serializable)
- oos.writeBoolean(true); //boolean -- Boolean(实现 serializable)
- oos.writeDouble(100.9); //double -- Double (实现 serializable)
- oos.writeUTF("韩顺平教育"); //String
- oos.close();
- System.out.println("序列化完成");
- }
- public static void main(String[] args) throws IOException {
- //指定反序列化的文件
- String filePath = "d:\\news12.dat";
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
- //反序列化,读取的顺序要和保存数据的顺序一致。否则会报异常
- System.out.println(ois.readInt());
- System.out.println(ois.readBoolean());
- System.out.println(ois.readDouble());
- System.out.println(ois.readUTF());
- }
system.out.print() system.in
当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文乱码,所以建议将字节流转换成字符流。在使用时可以指定编码
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- //1.把FileInputStream 转成 InputStreamReader
- //2.指定编码 gdk
- InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath),"gbk");
- //3.把 InputStreamReader 传入 BufferedReader(isr)
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- //4.读取
- String s = bufferedReader.readLine();
- System.out.println("读取到的是:" + s);
- ///5.关闭外层
- bufferedReader.close();
- }
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath),"utf-8");
- outputStreamWriter.write("hi,韩顺平教育");
- outputStreamWriter.close();
- }
- public static void main(String[] args) throws IOException {
- //使用Properies 类来读取配置文件
- //1.创建Properies对象
- Properties properties = new Properties();
- //2.加载指定文件
- properties.load(new FileReader("d:\\news123.txt"));
- //3.把k-v显示在控制台
- properties.list(System.out);
- //4.根据key 获取对应的值
- String id = properties.getProperty("id");
- String name = properties.getProperty("name");
- System.out.println("id:"+id+" name:"+name);
- }
- public static void main(String[] args) throws IOException {
- //使用Properies 类来创建配置文件,修改配置文件
- Properties properties = new Properties();
- //创建
- //如果该文件没有key,就是创建
- //如果该文件右key,就是修改
- properties.setProperty("charset","utf8");
- properties.setProperty("user","root");
- properties.setProperty("psw","root");
- //将k-v存储文件 null表示unicode码
- properties.store(new FileOutputStream("d:\\news123.txt"),null);
- }
- public static void main(String[] args) throws IOException {
- String dirctory = "d:\\mytemp";
- File file = new File(dirctory);
- if (!file.exists()){
- if (file.mkdir()){
- System.out.println("创建成功");
- }else{
- System.out.println("创建失败");
- }
- }
-
- String filePath = dirctory+"\\hello.txt";
- File file1 = new File(filePath);
- if (!file1.exists()){
- if (file1.createNewFile()){
- System.out.println("创建成功");
- }else{
- System.out.println("创建失败");
- }
- }
- }
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
- String str = "";
- int i = 0;
- while((str = bufferedReader.readLine()) != null) {
- i++;
- System.out.println(i + ". " + str);
- }
- }
- @SuppressWarnings({"all"}) //取消文件警告
- public class Hello {
- public static void main(String[] args) throws IOException {
- String filePath = "d:\\news123.txt";
- Properties properties = new Properties();
- properties.load(new FileInputStream(filePath));
- String name = properties.getProperty("name");
- String color = properties.getProperty("color");
- int age = Integer.parseInt(properties.getProperty("age"));
- Dog dog = new Dog(name, color, age);
- System.out.println(dog);
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(filePath));
- objectOutputStream.writeObject(dog);
- objectOutputStream.close();
- }
- }
-
- class Dog implements Serializable{
- String name;
- String color;
- int age;
-
- public Dog(String name, String color, int age) {
- this.name = name;
- this.color = color;
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- ", color='" + color + '\'' +
- ", age=" + age +
- '}';
- }
- }