文档章节

设计一个文件系统

一贱书生
 一贱书生
发布于 2016/11/22 09:51
字数 1679
阅读 11
收藏 0
点赞 0
评论 0

参考:

首先要知道Java card里面的文件系统结构,也就是有哪些文件:

 

包括四大类文件,应用基本文件——也就是发卡方官方的一些信息,然后是持卡人个人信息的文件,再就是EP(电子钱包)文件,以及最重要的密钥文件。并且密钥文件必须先于其他三个文件之前创建,因为没密码你弄啥操作不科学呀。

几大文件反应到代码中就是几大数据结构:

 

理解了文件系统之后就要一一去看各个文件代码模块是怎么实现的:

举个例子:

这是二进制文件数据结构的 部分代码,可以看到它的构造函数需要传进一个pdata参数,其实就是要传输apdu命令的data部分给它。由于这几大数据结构代码课上都给得差不多 了,而且本篇只讲文件系统的创建,所以目前只需要知道这几大文件数据结构的接口就够了,主要还是看主程序代码,也就是purse.Java。嗯,本次java card的开发就是以电子钱包的开发作为项目来学习的。

先直接上主程序purse.java的代码,其他几个java文件的代码在后面学习篇再放:

 


既然是要创建文件,当然就要先从终端获取apdu命令,判断它的命令里面是不是要卡片创建文件,怎么判断呢?通过ins值,就是这句代码:

 

 

[java] view plain copy

在CODE上查看代码片派生到我的代码片

  1. case condef.INS_CREATE_FILE:        return create_file();  

 

 

这里有个常量,在condef.java中定义:

 

 


condef.java文件里面定义了一些ins值常量,还有就是如果是要创建文件,那要创建的是什么文件呢,通过pdata的第一位判断,也就是pdata[0]:

 

所以condef.java里面也定义了这部分文件类型的常量。

既然已经判断出了apdu命令是要我们创建文件,同时又判断出了要创建的是什么文件,接下来就简单了,就是直接调用几大文件数据结构的接口去创建相应的文件,同时,这里要判断一些异常的情况,也就是apdu命令有输入错误的情况,然后返回相应的异常给终端。比如:

 

[java] view plain copy

在CODE上查看代码片派生到我的代码片

  1. if(papdu.cla != (byte)0x80)  
  2.     ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);  
  3.   
  4. if(papdu.lc != (byte)0x07)  
  5.     ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);  
  6.   
  7. if(EPfile != null)//有文件了还重复创建则会报错  
  8.     ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);  
  9.   
  10. if(keyfile == null)//都还没密钥文件(必须先于任何其他文件创建)  
  11.     ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);  


嗯,创建文件就是这么简单了,主要就是要理解文件系统里面的几大文件,同时看懂文件数据结构的几个java文件是怎么实现的。然后调用就很简单了。

 

最后,看看运行结果,由于终端要发送不少命令,所以可以把命令全部放到文件里面,然后直接在命令行中读取文件,然后就会在模拟器中执行文件里面的所有命令了。

首先,把命令脚本名称改一下,主要是改后缀名为jcsh:

然后运行之后再命令行中先输入:

 

[java] view plain copy

在CODE上查看代码片派生到我的代码片

  1. /set-var path "文件路径(不包括文件名.jcsh)"  

 

 

查找文件路径的快速方法(通用电脑小常识),查询文件属性,然后就可以看到文件所在的路径了。

输入上面那条路径命令之后,就再输入文件名(不包括后缀),比如这里是purse,然后回车就可以让模拟器执行命令脚本里面的所有命令了,注意,有 时候脚本文件里面会有一些奇奇怪怪的未注释的中文字符,比如中文的空格,有很多软件开发工具都对这些非常敏感会导致执行脚本出错,我在执行脚本的时候就遇 到了,解决办法是重新建一个txt文件,然后改下文件名,把脚本命令复制进来。

命令脚本内容:

运行结果:

可以看到都是No Error.也就把四大文件都给建立好了,后面的就是在文件里面进行添加密钥等等的操作了,这是后面学习篇的内容。值得注意的是,每次重新运行的时候,模 拟器不会保存你之前创建的文件,毕竟只是个模拟器嘛。所以除非一直运行着保留着上面创建文件的状态,否则重新运行后应当重新建立文件。

 

对文件进行复制,压缩,解压等操作,相当于一个简单的文

管理系统。对此我新加了剪切,删除,和重命名等功能。程序的整体输入

控制是采用图形用户界面,同时为了减少用户输入时不必要的错误,程序

还支持文件选择器功能,用户可以直接点击相应的按钮选择相应的文件或

文件夹。

 

1

 

复制功能实现了将文件复制到指定的文件夹中(包括文件夹的复制

和单个文件的复制)

,

同时允许用户选择不同类型的文件复制。其

中有全文件复制(文件夹里所有文件全部复制)

、无空文件夹的文

件复制

(即复制的文件夹不含空文件夹)

指定参数的文件复制

(即

文件夹复制时可以指定相应的类型参数

doc

txt

等选择要被复制

的文件类型)

 

2

 

压缩功能实现将文件压缩到指定路径(包括单个文件的压缩和文件

夹的压缩)

 

3

 

解压功能实现将指定的压缩文件解压到指定的路径

 

4

 

剪切功能实现将制订文件夹下的文件剪切到制订的文件夹下,与复

制不同的,剪切后该文件只存在于剪切后的文件夹。

 

5

 

删除功能实现了文件的删除和文件夹删除,其中文件的删除可以直

调用文件的方法删除文件,而文件夹的删除必须递归删除文件夹中

的所有文件,然后再层层调用方法删除文件夹。

 

6

 

重命名功能实现对指定文件夹下的文件的重命名,如果该文件夹下

已经存在该文件名,则提示重新命名

参考:http://wenku.baidu.com/link?url=U8NnYDIKsvxyJlGGzzm8CoKyuUTgZgTLKTFEO-FqAd5hmcXaLSFWFi7gwhnEmTgYnjrRKJnKZHJH_7TMYSMhcpZ5bMUiSe_B8BgDQnWDmV7

参考:https://my.oschina.net/courage/blog/474323

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 722
码字总数 600072
作品 0
我们公司打算进行系统升级,求助各位大神

是这样的,我们公司是做医疗器械的,之前做了个老系统(网页端和移动端),现在由于业务需要,老系统技术落后,网页端设计难看打算重新设计一个有网页端和移动端的出来。 先解释一下业务:医...

在我的歌声里 ⋅ 2016/11/05 ⋅ 1

6 个开源的大数据文件系统

大数据在今天吸引了大量关注,个人、企业和政府机构之间的互动创造了数据的海洋,通过有效识别、访问、筛选和分析其中部分数据能带来新的见解和益处。大数据需要大量的储存空间,先进的存储基...

oschina ⋅ 2013/04/14 ⋅ 6

堆叠式的文件系统--MTFS

MTFS(MulTi File System)是一个基于副本的可靠性增强系统。它通过维持文件的多个副本,提高分布式存储系统的可靠性。 MTFS是一个堆叠式的(stackable)文件系统,它本身不提供数据的存储能...

pkuelelixi ⋅ 2012/07/17 ⋅ 0

生成跨平台 UI 代码等工具集合-Lona

Lona 是用于定义设计系统并使用它们生成跨平台UI代码,Sketch文件,图像和其他工件的工具集合。 设计系统在 JSON 中的集合是以下定义: 组件(可以嵌套) 颜色,文本样式,渐变和阴影 数据类...

匿名 ⋅ 2017/11/29 ⋅ 0

Linux与Windows高速缓存处理机制

现代操作系统都在各个级别应用了高速缓存的策略,从而可以平滑化物理硬件的访问差异。一般的高速缓存分为两级,cpu和内存之间一般会设置高速缓存,但是 这一般是硬件实现的,还有一个高速缓存...

晨曦之光 ⋅ 2012/04/10 ⋅ 0

文件系统在NVMe SSD上的性能表现分析

文件系统是访问存储的一种常用方式,目前常用的文件系统都是针对磁盘的特性进行设计的。例如,为了解决磁盘随机小数据访问的问题,在文件系统层面引入了Page cache机制,利用内存缓存对这种访...

wuzhongjie ⋅ 2016/09/25 ⋅ 0

根文件系统的原理

以下内容源于朱有鹏嵌入式课程对的学习,如有侵权,请告知删除。 一、linuxrc本质 1、/linuxrc是一个可执行的应用程序 (1)/linuxrc是应用层的,和内核源码没有关系; (2)/linuxrc在开发板...

oqqHuTu12345678 ⋅ 2017/05/06 ⋅ 0

一步一步设计你的数据库一

引言:一直在从事数据库开发和设计工作,也看了一些书籍,算是略有心得。很久之前就想针对关系数据库设计进行整理、总结,但因为种种原因迟迟没有动手,主要还是惰性使然。今天也算是痛下决心...

五味格子 ⋅ 2011/05/10 ⋅ 0

标准的软件开发过程及各步骤需要编写的文档

文档应该是软件过程的"支持过程类"(请看本版软件过程一文); 一、标准的软件开发过程  软件开发的标准过程包括六个阶段,而六个阶段需要编写的各类文件达14种之多,在每个阶段需要编写哪些文...

import_key ⋅ 2013/11/04 ⋅ 0

ASP.NET MVC 2生成动态表单的一种最简单的思路

在BPM、OA等系统中,都会存在一个表单设计器。有些是通过操作gridview来完成一个表单的设计;有些是通过类似VS拖拽的方法完成一个表单的设计。很明显后面一种优越于前面一种。无论是哪种,最...

王二狗子11 ⋅ 01/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 14分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 16分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 26分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 28分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 30分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 32分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部