Window与Linux跨平台JAVA编程的注意事项
来源:互联网 发布:小熊相机软件 编辑:程序博客网 时间:2024/05/17 07:38
该博文用于记录在开发过程中遇到的跨平台JAVA程序遇到的异常情况与处理
路径处理
- 不要写绝对路径
如C:\\admin\\test
路径应该从根目录开始使用config
或者静态类的方式进行配置,这样比较好修改。比如:
public static class ComStatic { String ROOT_FOLDER = "ROOT"; String FILE_TEMP = "TEMP"; String WINDOWS_HOME = "C\:"; String LINUX_HOME = "/opt"; } class myClass { public void doSomething() { //路径: C:/ROOT/TEMP String static ROOT_PATH_WINDOWS = String.format("%s%s%s%s%s", ComStatic.WINDOWS_HOME, File.separator, ComStatic.ROOT_FOLDER, File.separator,ComStatic.FILE_TEMP); //路径: /opt/ROOT/TEMP String static ROOT_PATH_LINUX = String.format("%s%s%s%s%s", ComStatic.LINUX_HOME, File.separator, ComStatic.ROOT_FOLDER, File.separator, ComStatic.FILE_TEMP); } }
- 不要直接用\ 或者 /
如上所示要用 File.separator;
- 可以自己做一个工具如CustomFileUtils来拼接路径
/** * 拼接路径 * @param pathList a, b, c, d * @return a/b/c/d */ public static String parsePath(String ... pathList){ if(pathList.length == 0){ return ""; } StringBuilder sb = new StringBuilder(); for(String o : pathList){ sb.append(o).append(File.separator); } return sb.toString().substring(0,sb.length()-1); }
加密解密问题
在windows上进行加密后,从Linux解密会出现javax.crypto.BadPaddingException:Given final block not properly padded
原因在于 SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法,然后调用 setSeed 方法;
该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。关于SecureRandom类的详细介绍,见
SecureRandom”>SecureRandom
解决方式:
//原错误方法 /** * 获得秘密密钥 * * @param secretKey * @return * @throws NoSuchAlgorithmException */ private SecretKey generateKey(String secretKey) throws NoSuchAlgorithmException{ /*主要是此处代码出錯*/ SecureRandom secureRandom = new SecureRandom(secretKey.getBytes()); KeyGenerator kg = null; try { kg = KeyGenerator.getInstance(DES_ALGORITHM); } catch (NoSuchAlgorithmException e) { } kg.init(secureRandom); // 生成密钥 return kg.generateKey(); } /** * 获得秘密密钥 * * @param secretKey * @return * @throws NoSuchAlgorithmException */ private SecretKey generateKey(String secretKey) throws NoSuchAlgorithmException{ //防止linux下 随机生成key SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); /* 注意这里 */ secureRandom.setSeed(secretKey.getBytes()); KeyGenerator kg = null; try { kg = KeyGenerator.getInstance(DES_ALGORITHM); } catch (NoSuchAlgorithmException e) { } kg.init(secureRandom); // 生成密钥 return kg.generateKey(); }
0 0
- Window与Linux跨平台JAVA编程的注意事项
- java跨平台的注意事项
- Linux与Windows平台的一些兼容性注意事项
- python virtualenv在window linux平台的安装与使用
- Window下的QT中文编程注意事项
- java编程的注意事项
- 跨平台Java程序注意事项
- 编写跨平台Java程序注意事项-Java基础-Java-编程开发
- 标准socket跨平台编程注意事项
- linux网络编程的注意事项
- 讲解关于编写跨平台Java程序时的注意事项
- 实现Java跨平台运行的十二个注意事项
- 实现Java程序跨平台运行的注意事项
- 编程的心法与注意事项
- java-编写跨平台Java程序注意事项
- java-编写跨平台Java程序注意事项
- X86平台Linux 32bit和64bit编程注意事项
- TI zigbee Z-stack linux gateway 在非Beaglebone平台的移植编译与注意事项
- 如何将JAVA工程转为MAVEN工程
- 使用butterknife中遇到的几个问题及解决方法
- hiho一下 第五十八周 Beautiful String dp
- javascript以及衍生框架自学笔记
- 教你自定义竖直跑马灯效果(广告专用)
- Window与Linux跨平台JAVA编程的注意事项
- Mysql之存储过程回顾
- jquery的DOM定位与操作
- C++ Eigen库计算矩阵特征值及特征向量
- 用到泛型的一些代码
- 使用Android Studio 1.3 版本进行NDK开发准备工作
- java单链表常用操作
- python中的模块以及package的小结
- 远程部署tomcat工程到Linux服务器