Java I/O 流 案例

简介: Java I/O 流 案例

案例:模拟文件上传功能

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

分析:

  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天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
8 2
|
6天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
8 1
|
19天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
33 15
|
18天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
26 5
|
23天前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
37 2
|
21天前
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
11 0
|
3月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
34 2
|
3月前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
精通 Java 后台开发:案例分析与实践
47 2
|
3月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
3月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】