IO流{覆盖和追加 Java复制文件 未知目录不存在 字符编码 字符输入流 字符输出流 一行代码复制文本}(二)

Java程序设计:Java的IO流 Java的IO操作 阅读详情

目录标题

覆盖与追加

在日常开发中
难免会对文件 进行写入操作
有些时候需要清空原有的内容
写入新内容
或者有些时候需要在原有内容的基础上
接着写



在这里插入图片描述

这时就需要针对不同情况
使用不同的构造方法
在下面的五个构造方法中
只有带append参数的构造方法
才可以指定写入方式


在这里插入图片描述

写入的方式有两种
一种是 false 代表覆盖
还有 一种是true 代表追加
除了最后一个构造方法以外
另外两个不带append参数的构造方法
内部都是调用带append参数的构造方法(重点!!!)
其append 默认为 false
即写入方式默认为覆盖



在这里插入图片描述

在覆盖方式下
只要是创建了输出流
即便你没有写入任何内容
原有内容都将被清空
这一点是非常危险的



在这里插入图片描述

练习

下面我们来验证
覆盖 是不是 如上面所说的
下面这是一段有内容的文件
然后我们仅仅只是创建了输出流
没有写入任何内容
执行程序后



打开刚刚的文件
可以看到
文件的内容 已经被清空
由此可见 在日常开发中
覆盖这种方式 要谨慎使用 (重点!!!)
因为这样 很容易误删文件里面的内容
造成不必要的损失



在这里插入图片描述

反观 追加方式
要安全的多



下面演示一下 追加的例子
还是创建一个有内容的文件
这次 我们使用追加方式来创建输出流



将 append参数值 设置为 true
然后顺便 追加一些新内容
执行程序后
打开刚刚的文件
可以看到




在这里插入图片描述

最后总结

本节 介绍了 append参数的两种含义
覆盖与 追加



在这里插入图片描述

Java复制文件

复制的本质其实是
把数据从一个文件中读出来
然后再写到另一个文件中去
这个过程是边读边写的
读到 -1 时结束



在这里插入图片描述

复制的前后内容一致

在这里插入图片描述

上面 提到的 ”读“ 和 ”写“
分别需要用到对应的流



读取数据 需要用到输入流 InputStream
这里我们选择它其中的一个子类
FileInputStream



而写入数据 需要用到 输出流OutputStream
这里我们选择它其中的一个子类
FileOutputStream



在这里插入图片描述

选好输入输出流以后
接下来 编写示例代码
下面是我们要复制的文件
内容是 ”abc“



首先 声明 输入输出流
初始值 为null
然后 写上try 代码块
在 try 代码块中 初始化 输入输出流
输入流 传入的是 目标文件路径 (也就是你要复制哪个文件)
输出流传入的是目的地文件路径(也就是你要把复制的文件放在哪)
创建输入输出流有异常抛出
使用catch将其捕获



接下来 创建一个字节数组
长度为 1024
这是最常用的长度
接着 声明一个用于记录读取字节数的变量 length
使用 while语句
循环读取字节 读到 -1 时结束
每读取一次 都调用输出流的write方法
写入字节数组 偏移量 为 0(也就是从字节数组下标0的位置开始写)
每次写入的长度为 当前读取的字节数length
至此 try代码块里面的内容编写完成




接下来 写上 finally代码块
在finally代码块中 关闭输入输出流
在关闭流之前
先判断一下 流是否为空
至此
整个示例编写完成



在这里插入图片描述

执行程序 观察执行结果
从执行结果来看
程序没有报错
文件复制成功
内容一模一样



在这里插入图片描述

总结

本节介绍了 使用输入输出流 完成复制功能
一共有四步
第一步:声明输入输出流
第二步:初始化输入输出流
第三步:边读边写
第四步:关闭输入输出流



在这里插入图片描述

处理未知文件(未知目录不存在)

我们可能会遇到这种问题
向文件中写入数据时
明明已经判断了 当文件不存在时 创建新文件 可还是会出现错误
会显示 “No such file or directory”(无此文件或目录)



在这里插入图片描述

“无此文件”可以理解 所以我们才要创建
问题就出现在“无此目录”上
文件名之前的都是目录



经过验证: Users(用户)目录存在
admin目录存在 Downloads(下载)目录存在
发现问题 Java目录不存在
所以只要其中有一个目录不存在 文件就会创建失败



在这里插入图片描述

在实际开发中 究竟是哪一个目录不存在
我们不得而知
但无论是哪个目录不存在
我们都可以使用
File对象的mkdirs方法轻松解决
它可将路径中所有不存在的目录都创建出来



在这里插入图片描述

接下来 我们来重写
这段处理未知文件的逻辑
依然是使用File对象
当文件不存在时
调用file 对象的mkdirs方法创建目录



注意点! 这里的 “二哥一直坚持.txt” 是我们要创建的文件
它不是一个目录
它前面的才是目录
所以需要先调用getParentFile()方法
获得父路径 返回的是 一个File对象
紧接着再调用mkdirs方法 创建目录



当目录创建失败时 输出“目录创建失败”
并 return
当目录创建成功时 继续创建文件
当文件创建失败时 输出“文件创建失败”
并 return
至此 整个逻辑编写成功(重点 重点 重点!!!)



但是这部分代码还可以优化
创建文件的代码可以省略不用写
因为使用输出流时
若文件不存在 系统会自动帮我们创建
else 这部分代码
可以移动到 if 语句中
不要忘记取反
至此 优化后的代码编写完成



在这里插入图片描述

在日常开发中 我们可以用下面这段代码
来创建未知文件
接下来 我们用新逻辑替换掉上面的逻辑代码
再试试看
重点: 对比两者的不同



从执行结果来看:
程序没有报错
不存在的目录 和 文件都已经创建好
内容也写了进去



在这里插入图片描述

对比两者 总结为什么代码会出错



在这里插入图片描述

总结:

本节介绍了
如何处理未知文件
一共有四步
第一步 创建 File对象
第二步 判断文件是否存在
第三步 创建目录
第四步 处理创建失败的情况



在这里插入图片描述

字符编码

学习字符编码相关知识
有助于我们了解
计算机是如何储存字符的


在这里插入图片描述

一:ASCII
计算机里面只能存 0 和 1
存不了 A,B,C,
更存不了中文



那该怎么办呢?
只能搞一张表格
让字符与 “O” 和 “1" 对应起来
例如 01000001对应A
01000010对应B



以此类推
最早搞这张表的是美国 他们取名叫 “ASCII编码表”
也叫 “ASCII字符集”
共128个字符
其中包括 32个不可打印的控制符
10个数字 26个大写字母 26个小写字母
和 34个标点符号



在这里插入图片描述

从零开始:PLUMED与GROMACS整合安装全攻略 本文详细介绍了如何从零开始整合安装PLUMED与GROMACS,包括系统环境检查、MPI配置、PLUMED编译安装、GROMACS补丁应用及常见问题解决方案。通过本教程,研究人员可以快速完成分子动力学模拟工具的整合安装,实现增强采样和自由能计算功能。 阅读详情

相关推荐

PDMS二次开发入门:手把手教你用PML2写第一个交互式窗体工具

本文详细介绍了如何使用PML2进行AVEVA PDMS二次开发,从零开始构建交互式窗体工具。通过PML2语言的面向对象特性、即时调试能力和深度系统集成优势,开发者可以高效创建自动化设计工具、批量修改属性和定制报表系统。文章包含开发环境配置、基础语法、窗体架构设计、事件处理等实战内容,帮助读者快速掌握PDMS二次开发技能。

weixin_29281941的博客 274

使用项目管理画布启动项目

许多人对商业模式画布并不陌生,它是亚历山大·奥斯特瓦德(Alexander Osterwalder)、伊夫·皮尼厄(Yves Pigneur)在《商业模式新生代》(Business Model Generation)中提出的一种用来描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。 在我们做敏捷软件项目inception(项目启动规划)的时候经常会用到商业画布,此时它的作用是帮助我们快速了解客户的业务、产品和市场,帮助客户梳理自己的资源、优势和盈利模式,总的来说,商业画布是一种简单实用的

IDEAL Garden 1224

Xilinx IP库在Modelsim/Questasim中的高效仿真实践

本文详细介绍了在Modelsim/Questasim中高效仿真Xilinx FPGA设计的核心方法。针对仿真时常见的IP核缺失错误,重点解析了两种主流解决方案:使用Vivado的compile_simlib命令自动编译完整仿真库,以及利用export_simulation命令为特定工程生成仿真脚本。文章还提供了手动配置库的深入理解、实战排错步骤及高级避坑指南,帮助用户构建稳定、高效的独立仿真环境。

sony5的博客 1231

Carla学习笔记(一)服务器跑carla本地显示窗口

其中host后替换为你的服务器IP,-carla-rpc-port和-p后为端口号,需要一致。python3 manual_control.py也可以替换为其他python脚本。因为电脑配置不够,所以在服务器跑carla,本地运行PythonAPI里的样例。把carla仓库的PythonAPI拷贝到本地,或者直接去官方里下载一下。

做题记录 4980

Label Studio 图像分割自动标注接入教程:从模型预测到一键上传 Predictions

这篇文章详细介绍了如何使用Label Studio进行图像分割任务的自动标注流程。主要内容包括: 环境准备:安装Label Studio和模型推理依赖 项目配置:启动Label Studio服务,创建项目并配置BrushLabels标注界面 数据准备:导入待标注图片,获取API访问凭证 模型推理:运行训练好的分割模型生成预测mask 结果上传:将预测结果转换为Label Studio格式并通过API上传为Predictions 文章提供了完整的操作指南,包括: 详细的命令行参数说明 推荐的项目目录结构 标注

. 452

动态表单设计

自定一表单数据结构。内容展示如有必要行转列。前端根据题目类型自定义组件后端跟俊题目类型用策略模式校验各种类型这样有统计功能的简单动态问卷就可以了展示时可能某些场景需要行转列。大概估摸使用的话有可能kmic_form_data_detail表的记录数比较大,后期再考虑数据或者表迁移或拆分。

zquwei的博客 3475

骚戴笔记公告

骚戴笔记公告

我从不打没有准备的仗! 2万+

Mac安装Claude Code的3种方式及5类报错解决方案

介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel

weixin_28728443的博客 365

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: IO流{文件和目录 File 字符如何储存在电脑上 字节输入流 字节输出流 read方法读的字节为什么返回int类型}(一)
下一篇: 注解和反射
二哥一直坚持
博客等级 码龄7年 8粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值