MyCP-实现文件的复制以及进制转换
MyCP
一、设计思路
确定MyCP的要求
根据需求可知MyCP需要实现类似Linux下cp XXX1 XXX2的功能,且需要支持两个参数:
- java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件
- java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)
由需求可知我们需要从命令行获取判断转换方式的参数以及转换文件的文件名,并在MyCP内按-tx和-xt参数的区别分两种情况对文件进行操作。
(一)将命令行中的参数传入MyCP
使用args[]数组将命令行中输入的参数-tx
或-xt
以及文件名记录下来,注意args[0]中的参数是-tx
。
(二)定义输入输出流,对文件进行操作
在MyCP中我使用了缓冲输入流,因此在文件输入时需要每行输入一个数据。在创建字符输入输出流对象后再建立缓冲输入输出流对象,通过使用redaLine()
方法以及write()
以及newLine()
方法对文件进行读写操作。需要注意的是,输入输出流一定要在try-catch语句中运行,并且在对输入输出文件进行操作后一定要关闭输入输出流对象,并且要先关闭缓冲流再关闭字节流。相关代码如下:
Reader fis = new FileReader(file);//输入输出流
BufferedReader inData = new BufferedReader(fis);
Writer fos = new FileWriter(file2);
BufferedWriteroutData=new BufferedWriter(fos);
inData.close();//关闭输入输出流的顺序
fis.close();
outData.close();
fos.close();
(三)根据-tx
与-xt
参数的不同分别进行相应进制的转换
使用if-else
语句对两种情况进行区分,并分别进行十进制转二进制和二进制转十进制。十进制转二进制使用Integer类的toBinaray(int i)
方法获得i的二进制形式的字符串,二进制转十进制使用Integer类的parseInt(String s,int radix)
方法,获得数据的十进制int型数。为了便于输出,我将转化完成的数据都用字符串形式记录并输出。相关代码如下:
while(( str=inData.readLine())!=null){//从文件中读出数据
System.out.println(args[1]+"的第"+i+"个数字"+str);
b=Integer.parseInt((String)(str.trim()));//将字符串转化为int型数
temp=Integer.toBinaryString(b);//转化为二进制字符串
System.out.println(args[2]+"的第"+i+"个数字"+temp);
outData.write(temp);//写入目标文件
outData.newLine();
}
while(( str=inData.readLine())!=null){//转化为十进制
System.out.println(args[1]+"的第"+i+"个数字"+str);
b=Integer.parseInt(str.trim(),2);
temp=String.valueOf(b);
System.out.println(args[2]+"的第"+i+"个数字"+temp);
i++;
outData.write(temp);
outData.newLine();
}
二、测试代码
由于需要使用命令行传入参数,因此没有使用junit对代码进行测试,运行结果及遇到的相关问题请见后面部分。
三、运行结果
四、码云代码
五、遇到的问题
在使用数据流对文件进行操作时遇到较多问题,但在更改为缓冲流后问题减少了很多。
- 问题1:使用
write()
方法写文件时出现乱码。 - 问题1解决方法:查看读入的文件,发现是因为输入没有控制在每行一个。
- 问题2:在使用数据流从文件读入数据并进行转换时出现java.lang.NumberFormatException 错误。
- 问题2解决方法:找到相应的进行转化的代码,发现是文件读入数据错误,该错误的详细解决方法请见参考资料。
六、感想与思考
本次选做需要实现的MyCP类看起来并不是很难实现,解决的思路也比较明确,但在实际操作中遇到了很多的问题。我原本使用的是数据流,但是在将文件中的数据读入时出现了乱码,但如果将读入的数据直接写入另一文件,文件中却是正确的数据,于是我换成了缓冲流进行输入输出。而在编译运行程序时的数据类型进行转换总是报错,由此可见泛型类还是很重要的。
参考资料
MyCP-实现文件的复制以及进制转换的更多相关文章
- chr()//ord() //进制转换函数//eval()//文件函数//split()
1.chr() 函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 用法:chr(i) i可以是10进制也可以是16进制的形式的数字. 2.or ...
- Day02_IP地址详解&进制转换&DOS基本命令与批处理
学于千峰教育开源课程 感谢 千峰教育官网 b站在线视频 IP地址详解 一.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的局域网的设 ...
- C++中进制转换问题
一直在刷题的时候,都会遇到一个坑,就是进制转换的问题.而每一次都傻乎乎的自己去实现一个.所以算是对以前的坑的一个总结. itoa 函数 itoa是广泛应用的非标准C语言和C++语言扩展函数.由于它不是 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- Python 进制转换 二进制 八进制 十进制 十六进制
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...
- C#-进制转换、基础语句、语句的总结与练习——★for循环:九九乘法表、三角形、菱形★
//for循环嵌套练习——打一个九九乘法表 ; i <= ; i++) { ; j <= i; j++) { Console.Write(j + "×" + i + & ...
- PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]
自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到. 可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...
- java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符
1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...
- 洛谷——P1017 进制转换
P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...
随机推荐
- 查看oracle当前的连接数
SQL> select count(*) from v$session #当前的连接数SQL> Select count(*) from v$session where status='A ...
- 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程
对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...
- 基于 Webhooks gitlab 自动化构建
基于gitlab webhooks 自动构建流程 1.服务器安装 git 服务 安装成功 配置 PHP 脚本: <?php // 接受头部信息 if (!isset($_GET['youpara ...
- Linux下tar bz gz等压缩包的压缩和解压【转】
Linux下用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩,本文是对压缩和解压命令的大致总结 .tar.gz 解压:tar zxvf FileName.tar.gz ...
- 【easy】202. Happy Number
happy number Write an algorithm to determine if a number is "happy". A happy number is a n ...
- python 打印Linux中文编码字符
2018-10-12 12:02:15 星期五 python -c "print '\346\234\215\345\212\241\345\231\250\346\217\220\344\ ...
- 初学python之路-day05
每天一总结,今天学习的是数据类型及其使用方法与可变与不可变类型. 今天了解的数据类型有整型int,浮点型float,字符串类型str,布尔型bool,列表list. 整型int与浮点型float都属于 ...
- KNN与K-Means的区别
KNN(K-Nearest Neighbor)介绍 Wikipedia上的 KNN词条 中有一个比较经典的图如下: KNN的算法过程是是这样的: 从上图中我们可以看到,图中的数据集是良好的数据,即都打 ...
- win7下安装linux(centos6.5)双系统详细小白教程
在正式介绍linux安装教程之前,先声明一下本人也是刚开始接触linux,所以教程只以成功安装linux为目标,里面的具体步骤我都是参考网上的教程自己操作实现的,至于为什么要这么做就不多做解释,大家想 ...
- MATLAB读视频报错 Unable to initialize the video obtain properties (videoreader in Matlab)
这个bug卡了半天,这里记录一下 Error using VideoReader/init (line ) Could not read file due to an unexpected error ...