Java控制台模拟用户上传文件

题目要求:

  1. 完成以下操作,模拟用户上传文件。接收用户输入的文件路径,进行以下功能:
    1. 如果文件不存在,提示错误信息。
    2. 如果用户输入的不是文件,是目录需要提示错误信息。
    3. 如果文件存在,则自动将文件保存到预先设置的目录中,如:d:/user_images。
    4. 需要为上传到服务器中的文件重命名,文件名的格式:yyyyMMddHHmmss+6位随机数(必须为20位).扩展名。如:20230802153621021456.mp4
    5. 上传文件的扩展名必须与上传文件的扩展名保持一致。
    6. 上传成功后,显示共用秒数。
    7. 上传失败时,显示错误信息。

代码实现

package com.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
/**
 * 1.完成以下操作,模拟用户上传文件。接收用户输入的文件路径,进行以下功能:
 * 		a)	如果文件不存在,提示错误信息。
 * 		b)	如果用户输入的不是文件,是目录需要提示错误信息。
 *		c)	如果文件存在,则自动将文件保存到预先设置的目录中,如:d:/user_images。
 *		d)	需要为上传到服务器中的文件重命名,文件名的格式:yyyyMMddHHmmss+6位随机数(必须为20位).扩展名。
 *			如:20230802153621021456.mp4
 *		e)	上传文件的扩展名必须与上传文件的扩展名保持一致。
 *		f)	上传成功后,显示共用秒数。
 *		g)	上传失败时,显示错误信息。
 */
public class Test {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入想要复制的文件的整体路径:");
		String fileName = sc.nextLine();
		// 根据用户输入的路径,创建文件对象
		File file = new File(fileName);

		// 判断文件或目录是否存在
		if (file.exists()) {
			// 判断是否是目录(无法复制目录)
			if (file.isDirectory()) {
				System.out.println("不能复制目录!");
				return;
			}

			// 复制文件 D:\VSCode-win32-x64-1.80.0.zip
			// 文件上传目录
			String path = "D:/tests/";
			// 文件上传的名字
			String name1 = createFileName();

			// 获得用户输入复制文件中 点 最后一次出现的位置,如果没找到返回-1
			int index = fileName.lastIndexOf('.');
			if (index == -1) {
				System.out.println("没有找到文件拓展名!");
				sc.close();
				return;
			}
			// 上传文件的拓展名
			String name2 = fileName.substring(index);

			BufferedInputStream input = null;
			BufferedOutputStream output = null;

			try {
				input = new BufferedInputStream(new FileInputStream(file));
				output = new BufferedOutputStream(new FileOutputStream(path + name1 + name2));
				byte[] array = new byte[255];
				Date start = new Date();
				System.out.println("复制开始……");
				int count = input.read(array, 0, array.length);
				while (count != -1) {
					output.write(array, 0, count);
					count = input.read(array, 0, array.length);
				}
				output.flush();
				Date end = new Date();
				System.out.println("复制完毕!");
				System.out.println("用时:" + (end.getTime() - start.getTime()) / 1000.0);
			} catch (FileNotFoundException e) {
				System.out.println("文件找不到!");
				e.printStackTrace();
			} catch (IOException e) {
				System.out.println("复制失败!");
				e.printStackTrace();
			} finally {
				if (input != null) {
					try {
						input.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (output != null) {
					try {
						output.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		} else {
			System.out.println("文件不存在!");
		}
	}

	/**
	 * 返回指定格式的字符串,格式yyyyMMddHHmmSS+6位随机数
	 */
	private static String createFileName() {
		LocalDateTime dateTime = LocalDateTime.now();
		StringBuilder s = new StringBuilder();
		s.append(dateTime.getYear());
		s.append(String.format("%02d", dateTime.getMonthValue()));
		s.append(String.format("%02d", dateTime.getDayOfMonth()));
		s.append(String.format("%02d", dateTime.getHour()));
		s.append(String.format("%02d", dateTime.getMinute()));
		s.append(String.format("%02d", dateTime.getSecond()));
		// 生成6位随机数
		Random r = new Random();
		s.append(r.nextInt(100000, 1000000));
		return s.toString();
	}

}

 运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值