- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在制作一个跨平台应用程序,它可以根据在线检索的数据重命名文件。我想清理从当前平台的 Web API 获取的字符串。
我知道不同的平台有不同的文件名要求,所以我想知道是否有跨平台的方法来做到这一点?
编辑:在 Windows 平台上不能有问号“?”在文件名中,而在 Linux 中,您可以。文件名可能包含此类字符,我希望支持这些字符的平台保留它们,否则,将它们删除。
另外,我更喜欢不需要第三方库的标准 Java 解决方案。
最佳答案
正如其他地方所建议的,这通常不是您想要做的。通常最好使用 File.createTempFile() 等安全方法创建临时文件。
您不应该使用白名单来执行此操作,而只能保留“好”字符。如果文件仅由中文字符组成,那么您将删除其中的所有内容。由于这个原因,我们不能使用白名单,我们必须使用黑名单。
Linux 几乎允许任何可能是真正痛苦的事情。我只想将 Linux 限制在与 Windows 相同的列表中,这样您以后就不用担心了。
在 Windows 上使用这个 C# 片段,我生成了一个在 Windows 上无效的字符列表。此列表中的字符比您想象的要多得多(41 个),因此我不建议您尝试创建自己的列表。
foreach (char c in new string(Path.GetInvalidFileNameChars()))
{
Console.Write((int)c);
Console.Write(",");
}
这是一个“清理”文件名的简单 Java 类。
public class FileNameCleaner {
final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
static {
Arrays.sort(illegalChars);
}
public static String cleanFileName(String badFileName) {
StringBuilder cleanName = new StringBuilder();
for (int i = 0; i < badFileName.length(); i++) {
int c = (int)badFileName.charAt(i);
if (Arrays.binarySearch(illegalChars, c) < 0) {
cleanName.append((char)c);
}
}
return cleanName.toString();
}
}
编辑:正如斯蒂芬建议的那样,您可能还应该验证这些文件访问仅发生在您允许的目录中。
以下答案包含示例代码,用于在 Java 中建立自定义安全上下文,然后在该“沙箱”中执行代码。
关于java - 是否有跨平台的 Java 方法来删除文件名特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155107/
本文实例讲述了MySQL学习笔记之数据的增、删、改实现方法。分享给大家供大家参考,具体如下: 1、增加数据 插入代码格式: insert into 表明 [列名…] values (值…)
有时候我们需要扩展一个数组,或者删掉数组的一部分,PHP为扩展和缩小数组提供了一些函数。对于那些希望模仿各种队列实现(FIFO、LIFO)的程序员来说,这些函数可以提供便利。顾名思义,从这些函数的函
作为一个小型的数据存储传递的工具——xml,大家肯定也不陌生,今天就关于xml的一些简单操作做些总结。 这些都是在控制台进行操作的····&m
话不多说,请看代码: ? 1
本文实例讲述了mysql语句实现简单的增、删、改、查操作。分享给大家供大家参考,具体如下: 1、创建db_shop数据库,如果该数据库不存在则创建 ?
使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中。 代码: 复制代码代码如下: create or replace trigger test_trigge
java连接数据库增、删、改、查工具类 数据库操作工具类,因为各厂家数据库的分页条件不同,目前支持Mysql、Oracle、Postgresql的分页查询 在Postgresql环境测试过了,其他
1、修改数据 复制代码代码如下: DataRow dr =
注册表可以用来进行存储一些程序的信息,例如用户的权限、或者某些值等,可以根据个人需要进行存储和删减。 当前注册表主目录: 引用包 Wesky.Net.OpenTools 1.0.5或
准备工作: 增、删、改、查的方法有很多很多种,这里只展示出常用的几种。 ?
需要5个类: 1.实体类:Person.java 2.抽象类:SQLOperate.java(封装了对数据库的操作) 3.助手类:DBOpenHelper.java(继承SQLiteOpenH
首先是是一个简单的例子,单链表的建立和输出。 程序1.1 复制代码 代码如下: #include<iostream> #include<string> using na
数据库操纵基本流程为: 1、连接数据库服务器 2、选择数据库 3、执行SQL语句 4、处理结果集 5、打印操作信息 其中用到的相关函数有 •resource m
CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了
项目结构: 添加页面: &
本文实例讲述了android操作sqlite数据库(增、删、改、查、分页等)及listview显示数据的方法。分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识
总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at
1. [代码]Mybatis全局配置文件 ? 1
我是一名优秀的程序员,十分优秀!