java关于文件记录篇章之文件夹创建篇
今天,创建一个文件夹目录的时候,创建多级目录的时候发现,自己老是创建失败,但是系统显示文件夹创建成功,但是你去找文件夹的时候,又发现创建失败,这里在我成功之后封装了一个创建文件夹的创建对象。
首先这个文件夹是用来解决本地存储文件和linux上存储文件,但是目前,我并未在linux上测试,但是根据Windows的反馈,算是成功了,故而写一篇博客记录一下,这个困扰了我一天的问题。
思路:
既然要上传文件到具体的文件目录下,第一步,我们需要做的是,创建文件目录,之后判断这个文件是否存在,如果存在,那么我们就可以之间写入文件,如果不存在,那么我们就需要使用mkdir或者mkdirs进行文件创建,其中mkdir是创建单个文件目录,适用于创建单级文件目录创建,mkdirs适合多级目录创建,以下我通过配置类来进行创建。
package com.it.common.utils;import com.it.common.constant.DateConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;/**** 创建一个文件上传工具类* @author HWZ* @date 2023年07月10日 16:17* @description*/
public class CreateUpLoadFileUtils {private static Logger logger = LoggerFactory.getLogger(CreateUpLoadFileUtils.class);@Value("${fds_pro_url}")public String rootPath;/*** 定义操作系统的名称*/final static String OS_NAME = "os.name";/*** 定义操作系统类型为Windows*/final static String OS_WINDOWS = "windows";/*** 如果是Windows的话,那么他的存储路径为 D:/test/data/expxsl* D:/test*/final static String WINDOWS_PATH = "D:/test/data/expxsl";/*** 如果是其他操作系统,这里默认不是Windows就是Linux*/final static String LINUX_PATH = "/data/expxsl/";/*** 先创建一个文件夹,如果当前文件夹不存在就创建一个,如果存在就使用当前文件夹*/public static String createFile() {String filePath;//创建一个StringBuilder对象,用来存储字符串常量File folder; //,folder1,folder2,folder3//判断一下当前所处的系统环境if (System.getProperty(OS_NAME).toLowerCase().contains(OS_WINDOWS)) {//获取当期日期 并以此时间作为文件夹String dateFoler = new SimpleDateFormat(DateConstant.FORMAT_TYPE_5).format(new Date());//通过一个StringBuilder创建一个文件夹 .append("/") File.separator,文件分隔符 然后添加一个日期,这里我发现一个问题,问题解决,使用mkdirs创建多级目录,也就是D:\test\data\expxsl需要手动创建StringBuilder sb = new StringBuilder(WINDOWS_PATH).append(File.separator).append(dateFoler);filePath = sb.toString();folder = new File(filePath);if(!folder.exists()){//直接创建多级目录boolean flag = folder.mkdirs();if(flag){logger.error("CreateUploadFileUtils:createFile创建文件成功");}}else{logger.error("当前文件夹创建失败,请检查文件夹是否存在");}// //TODO 目录创建好了,接下来就是存放当前具体文件了
// try {
// //异常处理
// //如果当前文件夹下没有具体文件,那么就创建该文件
// BufferedWriter bw = new BufferedWriter(new FileWriter( filePath+ File.separator + "text1.txt"));
// bw.write("你好世界111哈哈哈哈!!!");
// bw.close();
// } catch (IOException e) {
// e.printStackTrace();
// }//.append(File.separator).append(dateFoler);//笨一点的方式,一级一级的创建,不推荐/*//创建一级目录//如果是Windows环境 sb.toString()String filePath = sb.toString();//System.out.println(filePath);folder = new File(filePath);System.out.println("当前处于Windows环境下");if (!folder.exists()) {boolean flag = folder.mkdir();if (flag) {logger.error("CreateUploadFileUtils:createFile创建文件成功1");}}else {logger.error("当前文件夹创建失败,请检查文件夹是否存在1");}//创建二级目录sb.append(File.separator + "data");String filePath1 = sb.toString();folder1 = new File(filePath1);if(!folder1.exists()){boolean flag = folder1.mkdir();if(flag){logger.error("CreateUploadFileUtils:createFile创建文件成功2");}}else{logger.error("当前文件夹创建失败,请检查文件夹是否存在2");}//创建三级目录sb.append(File.separator + "expxsl");String filePath2 = sb.toString();folder2 = new File(filePath2);if(!folder2.exists()){boolean flag = folder2.mkdir();if(flag){logger.error("CreateUploadFileUtils:createFile创建文件成功3");}}else{logger.error("当前文件夹创建失败,请检查文件夹是否存在3");}System.out.println("输出当前所在文件路径");System.out.println(System.getProperty("user.dir"));//创建4级目录sb.append(File.separator+dateFoler);String filePath3 = sb.toString();folder3 = new File(filePath3);if(!folder3.exists()){boolean flag = folder3.mkdir();if(flag){logger.error("CreateUploadFileUtils:createFile创建文件成功4");}}else{logger.error("当前文件夹创建失败,请检查文件夹是否存在4");}//TODO 存储相关文件信息try {//异常处理//如果当前文件夹下没有具体文件,那么就创建该文件BufferedWriter bw = new BufferedWriter(new FileWriter( filePath3+ File.separator + "text.xsl"));bw.write("你好世界111!!!");bw.close();} catch (IOException e) {e.printStackTrace();}
*/return filePath;} else {//添加一个具体的文件路径//path.append(LINUX_PATH).append(new SimpleDateFormat(DateConstant.FORMAT_TYPE_5).format(new Date())).append("/");//获取当前的时间,并根据当前的时间去存放一个Excel文件String dateFoler = new SimpleDateFormat(DateConstant.FORMAT_TYPE_5).format(new Date());StringBuilder sb = new StringBuilder(LINUX_PATH).append(File.separator).append(dateFoler);;// System.out.println(sb);System.out.println("当前环境处于Linux下");filePath = sb.toString();folder = new File(filePath);if (!folder.exists()) {boolean flag = folder.mkdirs();if(flag){logger.error("CreateUploadFileUtils:createFile创建文件成功");}}else{logger.error("创建文件失败,请检查是否存在文件");}System.out.println(sb.toString());//以上是创建文件夹//TODO 接下来就是存储文件了,并将相关数据存储到文件中去了
// try {
// //异常处理
// //如果当前文件夹下没有具体文件,那么就创建该文件 注意,这个连接肯定是要改的,具体生成的excel文件可不是我这样的后缀,充当变量然后拼接后缀来动态创建
// // ,就如同这里的时间文件夹一样
// BufferedWriter bw = new BufferedWriter(new FileWriter( filePath+ File.separator + "text1.txt"));
// //这里写的时候就是写具体的文件了
// bw.write("你好世界111哈哈哈哈!!!");
// bw.close();
// } catch (IOException e) {
// e.printStackTrace();
// }}return filePath;}public static void main(String[] args) {// System.out.println(new SimpleDateFormat(DateConstant.FORMAT_TYPE_5).format(new Date()));
// String dateFoler = new SimpleDateFormat(DateConstant.FORMAT_TYPE_5).format(new Date());
// StringBuilder sb = new StringBuilder(LINUX_PATH).append(dateFoler).append("/");
// System.out.println(sb.toString());// createFile();// String folderPath = "/path/to/folder";
//
// String filePath = "/path/to/folder/filename.txt";
// String fileContent = "要写入的文件内容";
//
// // 创建文件夹
// //File folder = new File(folderPath);
// File folder = new File(WINDOWS_PATH);
// if (!folder.exists()) {
// boolean isCreated = folder.mkdir();
// if (isCreated) {
// System.out.println("文件夹创建成功!");
// }else {
// System.out.println("文件夹创建失败!");
// return;
// }
// } else {
// System.out.println("文件夹已存在!");
// }
//
// // 写入文件
// File file = new File(filePath);
// try {
// if (!file.exists()) {
// boolean isFileCreated = file.createNewFile();
// if (!isFileCreated) {
// System.out.println("文件创建失败!");
// return;
// }
// }
//
// FileWriter writer = new FileWriter(file, true);
// writer.write(fileContent);
// writer.close();
// System.out.println("文件写入成功!");
// } catch (IOException e) {
// System.out.println("文件写入失败:" + e.getMessage());
// }
// }/*File file=new File("D:\\Qiju_Li");if(!file.exists()){//如果文件夹不存在file.mkdir();//创建文件夹}try{//异常处理//如果Qiju_Li文件夹下没有Qiju_Li.txt就会创建该文件BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\Qiju_Li\\Qiju_Li.txt"));bw.write("Hello I/O!");//在创建好的文件中写入"Hello I/O"bw.close();//一定要关闭文件}catch(IOException e){e.printStackTrace();}*/createFile();/*// 本地路径没有,这创建本地工作任务基础路径String pathname = "D:/user/company/mapreduce";File file = new File(pathname);boolean flag = false;if (!file.exists()) {flag = file.mkdirs();}try {//异常处理//如果当前文件夹下没有具体文件,那么就创建该文件BufferedWriter bw = new BufferedWriter(new FileWriter("D:/user/company/mapreduce/text.txt"));bw.write("我就是喜欢你!!!");bw.close();} catch (IOException e) {e.printStackTrace();}System.out.println("path status:" + flag);
*/}}
相关文章:
java关于文件记录篇章之文件夹创建篇
今天,创建一个文件夹目录的时候,创建多级目录的时候发现,自己老是创建失败,但是系统显示文件夹创建成功,但是你去找文件夹的时候,又发现创建失败,这里在我成功之后封装了一个创建文件夹的创建对…...

显示器显示的画面突然偏红色如何解决
显示器显示的画面突然偏红色如何解决 1. 概述2. 解决方法结束语 1. 概述 显示器显示的画面突然偏红色 ,使用向日葵远程电脑,看到的画面是正常的,但是显示器上的画面确还是骗红的,这时候就需要看一下是不是开启了系统也夜间模式&a…...
【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码
el-table合并单元格 1.固定合并 官方挺提供的合并具体某行列的方法:el-table合并行或列通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。 该函数可以返回一个包含…...

管理方法论:6. 正视团队冲突——化解危机,长治久安
概念 团队冲突指的是两个或两个以上的团队在目标、利益、认识等方面互不相容或互相排斥,从而产生心理或行为上的矛盾,导致抵触、争执或攻击事件。 参考: https://baike.baidu.com/item/%E5%9B%A2%E9%98%9F%E5%86%B2%E7%AA%81/6747073 htt…...

基于SpringBoot的一套强大后台管理系统
概述 一个功能强大而完善的后台管理系统框架,用户可基于此框架进行二次开发,定制成符合自己的需求的后台管理系统! 详细 运行截图: 项目结构: 详细说明: 环境说明: jdk1.8mavenMySQL5.7 项…...

音乐项目后台管理系统出现的问题
1.当对歌手的歌曲进行编辑时候,会把所有的歌曲信息给修改了。 解决方法:修改controller层的中SongController代码中的这一行代码 boolean flag songService.updateById(song); 2.添加歌曲,在弹出框中输入,没有显示。原因:前端页…...

数据结构——图(图的存储及基本操作)
文章目录 前言一、邻接矩阵法(顺序存储)1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…...

2023年项目管理工具使用趋势分析及预测
随着技术的不断进步以及工作和领导态度的演变,各个行业都在经历着深刻的变革。项目管理领域同样如此,团队项目的技术和人员管理风格及策略正在不断地调整与优化,以适应新冠疫情后所呈现出的新的工作场所格局。在此背景下,以下是我…...
Vue3 实现一个无缝滚动组件(支持鼠标手动滚动)
Vue3 实现一个无缝滚动组件(支持鼠标手动滚动) 前言 在日常开发中,经常遇到需要支持列表循环滚动展示,特别是在数据化大屏开发中,无缝滚动使用频率更为频繁,在jquery时代,我们常用的无缝滚动组…...

【IP数据报】IP地址和MAC地址的区别
1、用IP地址来标识Internet的主机 在每个IP数据报中,都会携带源IP地址和目标IP地址来标识该IP数据报的源和目的主机。IP数据报在传输过程中,每个中间节点(IP 网关)还需要为其选择从源主机到目的主机的合适的转发路径(即路由)。IP协议可以根据路由选择协…...
高并发笔记
如何设计一个高并发系统?:https://mp.weixin.qq.com/s/yFc-70DEhloWn0G3GDa6Yw 分布式 ID 服务实践:https://mp.weixin.qq.com/s/KAts9Zjj8JpEd0Q6pqLlgQ 一文聊透布隆过滤器:https://mp.weixin.qq.com/s/qJ2fDm1Z57bPSzOBrgiqfg …...

eNSP网络学习
一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台,主要对企业网络路由器、交换机进行软件仿真,完美呈现真实设备实景,支持大型网络模拟,让…...

广州xx策划公司MongoDB恢复-2023.09.09
2023.09.08用户的MongoDB数据库被勒索病毒攻击,数据全部被清空。 提示: mongoDB的默认端口为27017,黑客通常通过全网段扫描27017是否开放判断是否是MongoDB服务器。一旦发现27017开放,黑客就会用空密码、弱密码尝试连接数据库。黑…...

golang --- module-aware 模式下 包引入
一、文件列表如下 其中helloWorld目录是main包(package)所在目录,即该目录下所有的goy源文件(不包含子目录)属于main包,hello.go是mian函数所在文件 二、module-aware 模式启用 开启mod模式 go env -w G…...
从原理到实践 | Pytorch tensor 张量花式操作
文章目录 1.张量形状与维度1.1标量(0维张量):1.2 向量(1维张量):1.3矩阵(2维张量):1.4高维张量: 2. 张量其他创建方式2.1 创建全零或全一张量:2.2…...

无涯教程-JavaScript - TRANSPOSE函数
描述 TRANSPOSE函数将单元格的垂直范围作为水平范围返回,反之亦然。必须将TRANSPOSE函数作为数组公式输入,该范围必须具有与行范围和列范围相同的行和列数。 您可以使用TRANSPOSE在工作表上移动数组或范围的垂直和水平方向。 语法 TRANSPOSE (array)键入函数后,按CTRL SHI…...

Webserver项目解析
一.webserver的组成部分 Buffer类 用于存储需要读写的数据 Channel类 存储文件描述符和相应的事件,当发生事件时,调用对应的回调函数 ChannelMap类 Channel数组,用于保存一系列的Channel Dispatcher 监听器,可以设置为epo…...
Spring Cloud 篇
1、什么是SpringCloud ? Spring Cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 2、什么…...

vim,emacs,verilog-mode这几个到底是啥关系?
vim:不多说了被各类coder誉为地表最强最好用的编辑器;gvim,gui vim的意思; emacs:也是一个编辑器,类似vscode; vim在使用的时候为了增强其功能,有好多好多插件,都是以.…...
解决npm run build 打包出现XXXX.js as it exceeds the max of 500KB.
问题描述: npm run build 时出现下面的问题: Note: The code generator has deoptimised the styling of D:\base\node_modules\_element-ui2.15.12element-ui\lib\element-ui.common.js as it exceeds the max of 500KB.在项目的根目录加粗样式下找到 …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...