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();
    }
}


目录
相关文章
|
23天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
24天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
59 3
|
26天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
48 2
|
27天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
15 2
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
19 1
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
52 15
|
2月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
37 5
|
2月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
45 2
|
2月前
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
14 0
|
4月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
38 2
下一篇
无影云桌面