Java I/O 流 案例

2 篇文章 0 订阅
此博客介绍了如何在Java中模拟用户上传头像功能,通过控制台输入头像路径,验证文件类型(jpg/png/bmp),检查文件是否存在,读取文件并写入指定目录,最终实现头像上传。过程中涉及文件I/O操作,如BufferedInputStream和BufferedOutputStream的使用。
摘要由CSDN通过智能技术生成

案例:模拟文件上传功能

需求:使用控制台模拟实际开发中上传用户头像功能

分析:

  1. 在控制台录入用户头像路径
  2. 解析路径字符串文件名是否合法:后缀名为:jpg / png / bmp
  3. 判断该路径表示的File对象是否存在,是否为文件:file.exists() ; , file.isfile();
  4. 读取该文件并写到指定目录
  5. 提示头像上传成功或失败  
import java.io.*;
import java.io.IOException;
import java.util.Scanner;

public class test1 {
    public static void main(String[] args) throws IOException {
        //需求:模拟用户上传头像的功能,假设所有用户头像都应该上传到项目下的lib文件夹中
        //1.定义一个方法,用来获取要上传的用户头像的路径 getpath()
        File path = getpath();
        System.out.println(path);
        //2.定义一个方法,用来判断要上传的用户头像在lib文件夹中是否存在。
        boolean flag = isexists(path.getName());
        if(flag) {
            //3.如果存在:提示,该用户头像已存在,上传失败
            System.out.println("该用户头像已存在,上传失败");
        }else{
            //4.如果不存在,就定义方法来上传该用户头像,提示上传成功
            uploadFile(path);
        }

    }
    public static File getpath() {
        //1.提示用户录入要上传的头像路径,并接受

        Scanner sc =new Scanner(System.in);
        //7. 因为不知道多少次能够成功,所以用while(true)改进
        while(true) {
            System.out.println("请录入要上传的头像图片的路径:");
            String path = sc.nextLine();
            //2.判断该路径的后缀名是否是 .jpg  .png  .bmp
            if(!path.endsWith(".jpg")&&!path.endsWith(".png")&&!path.endsWith(".bmp")) {
                //3. 如果不是,就提示你录入的不是图片,请重新录入
                System.out.println("您录入的不是图片,请重新录入");
                //4.如果是,程序接着执行,判断该路径是否存在,并判断是否是文件
            }else {
                File file = new File(path);
                if(file.isFile()&& file.exists()){
                    //6. 如果是,就说明这是我们要的图片,直接返回
                    return file;
                }else {
                    //5.如果不是,就提示你录入的路径不合法,请重新录入
                    System.out.println("您录入的路径不合法,请重新录入:");
                }
            }
        }
    }

    public static boolean isexists(String path) {
        //1.将lib封装成File对象
        File file = new File("lib");
        //2.获取lib中所有文件(夹)的名称数组
        String[] str = file.list();
        //3.用第二步获得的数组依次和path比较
        for (String s : str) {
            if (s.equals(path)) {
                //如果一致,返回true
                return true;
            }
            //若果不一致,返回false
        }
        return false;
    }

    public static void uploadFile(File path) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
        // path:d:/a/1.jpg
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("lib/" + path.getName()));
        //想要得到的:lib/1.jpg
        int len;
        while((len = bis.read())!=-1) {
            bos.write(len);
        }
        bis.close();
        bos.close();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TYUT ljk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值