编程实现类似Linux下cp功能
MyCP的代码实现
一、题目要求:
编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:
- java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件
- java MyCP -xt XXX1.bin XXX2.txt 用来二进制文件把转化为文本文件(内容为十进制数字)
二、设计思路
此次的代码要求实现类似Linux下cp的功能。我们需要注意的以及考虑的细节有以下几点:
- 源文件和目标文件分属不同的文件形式,且由命令行提供。
- 程序可以接受“-tx”或“-xt”参数来选择转换形式(不需要实现类似cp命令的其他参数)
3.文本文件中内容为十进制数字(意味着没有其他形式的字符) - 如何简单实现二进制与十进制的相互转换
1.伪代码实现
程序读取命令行输入的三个参数,参数为“-tx”或“-xt”,否则报错并终止运行。
当参数为“-tx”时,读取txt文件中的数字,转换为二进制后写入bin文件
当参数为“-xt”时,读取bin文件中的二进制数字,转换为十进制后写入txt文件
2.实现读取命令行参数
在课上,老师曾数次提醒我们注意Java语言的main方法:public static void main(String args[]) 。我们命令行中的字符会自动存储在一个名为args的字符类型数组中,且从args[0]开始存储。如图所示:

。
(注意⚠️:这里老师提到过,java和C语言有所区分。在运行时,java会直接从文件名后的参数开始存储,而C语言则会从文件名开始存储)
因此,我们只需要读取args的值,便可以实现“-tx”和“-xt”值的判断。
3.实现十进制到二进制的转化
实现十进制到二进制的转化其实就是将笔头上的方法转化成程序语言,这里我选择使用除二取余法,即除k取余法,主要用于将十进制的数转化为k进制。下图摘自百度百科:

代码实现为:
int sum;
for (int i = number; i >= 1; i = i / 2) {
if (i % 2 == 0) {
sum = 0;
} else {
sum = 1;
}
result = sum + result;//不断让新计算的sum值置于result之前,实现余数的倒序排列。(result为字符串类型)
}
}
4.实现二进制到十进制的转化
实现二进制到十进制的转化更加简单,通过查阅API文档,我们发现Integer.parseInt方法就可以实现这一操作。

5.读入和写入文件
事实上打从一开始我就决定将文件中的数字用数据流读成一个数字字符串,但由于相关的知识理解不透彻,教材中对数据流的介绍我一直认为有点语焉不详,在反复修改代码n次后我决定放弃数据流(或许是我的理解有本质上的错误?还要以后细细研究一番),采用缓冲流来进行文件操作,最后经过一些小调试,成功实现了文件操作。
三、代码截图及运行截图

首先建立一个写有20175308的a.txt和一个空的b.bin文件

运行代码后检查b.bin,内容正确

将b.bin内容换成一串计算好的二进制数1001100010000100001010011 并运行代码

运行程序后打开a.txt,文件中内容正确

四、编程中遇到的问题
- 写入文件时出现文件无法写入的情况
解决:检查代码,忽略了flush()的作用,没有刷出缓冲池中的数据。
编程实现类似Linux下cp功能的更多相关文章
- 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能 要求:MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十 ...
- 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...
- 编程实现类似Linux系统的cp功能
选做题目以及分析 题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文 ...
- 《Linux下cp XXX1 XXX2的功能》的实现
<Linux下cp XXX1 XXX2的功能>的实现 一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyC ...
- 20175303 Mycp实现Linux下cp xxx1 xxx2的功能
20175303 Mycp实现Linux下cp xxx1 xxx2的功能 一.题目要求 编写MyCP2.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP2支持两个参数: ja ...
- 学号20175313 《实现Linux下cp XXX1 XXX2的功能(二)》第九周
目录 MyCP2 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.代码链接 七.代码实现过程中遇到的问题 八.运行结果截图 九.心得体会 十.参考资料 MyCP2 一.题目 ...
- 学号20175313 《实现Linux下cp XXX1 XXX2的功能(一)》第九周
目录 MyCP 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.代码链接 七.代码实现过程中遇到的问题 八.运行结果截图 九.参考资料 MyCP 一.题目要求 编写MyCP ...
- Linux C编程之一:Linux下c语言的开发环境
---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU C/C++编译器gcc: 调试器: ...
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...
随机推荐
- 基于webpack的react脚手架
一.前言:react的cli开发模式太过于简单,好多东西都要自己配置 二.这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译l ...
- Node.js+Koa开发微信公众号个人笔记(一)准备工作
本人也是在学习过程中,所以文章只作为学习笔记,如果能帮到你,那就更好啦~当然也难免会有错误,请不吝指出~ 一.准备工作 1.本人学习教程:慕课网Scott老师的<Node.js七天搞定微信公众号 ...
- 【工具相关】Web-ionic-npm的安装
一, 一般最新版本的Node.js集悲剧了npm.在命令行下,输入命令: "npm-v",可以测试npm是否安装.如下图所示: 二,上图显示了npm的版本号,即代表已经安装了npm ...
- Linux 学习笔记之超详细基础linux命令 Part 9
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 8----------------- ...
- JavaScript大杂烩5 - JavaScript对象的若干问题
1. 类型检查:instanceof与typeof 这是两个相似的操作符,instanceof用于检测函数的实例类型,主要是在面向对象编程中检查new出来的对象类型,需要注意instanceof是检查 ...
- 我的博客:C# PHP J2ee Java Android js WP Asp.net mvc Python
<p><A target="_blank" href="http://blog.163.com/hr_company_product/" &g ...
- JQuery实战中遇到的两个小问题$(document).ready() 、bind函数的参数传递问题
一.$(document).ready() 与 window.onload的区别 1.执行时间 window.onload 必须等到页面内所有元素(包括图片 css js等)加载完毕后才会执行. $( ...
- sql最简单的查询语句
-- 2 **************************************************** -- 最简单的查询语句 -- 2.1 ----------------------- ...
- jquery判断checkBox的checked
jquery判断checked的三种方法:.attr('checked): //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('c ...
- Numbers
Encoding style, data structure, more content about the list, use the list as a stack, use the list a ...