首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用文件路径字符串作为参数初始化对象是不是很糟糕的编码实践?

使用文件路径字符串作为参数初始化对象是一种不推荐的编码实践。以下是详细解释:

文件路径字符串作为参数初始化对象的方式存在以下问题:

  1. 可移植性差:文件路径字符串通常是特定于操作系统的,不同操作系统使用不同的路径分隔符和命名规则。因此,如果代码在不同的操作系统上运行,可能会导致路径解析错误或无法找到文件。
  2. 可读性差:使用文件路径字符串作为参数初始化对象,代码的可读性会降低。其他开发人员在阅读代码时,可能需要查看文件路径字符串的具体内容才能理解代码的意图。
  3. 难以维护:如果文件路径字符串被硬编码到代码中,当文件路径发生变化时,需要手动修改代码。这样的做法不仅容易出错,还会增加维护成本。

相比使用文件路径字符串,更好的做法是使用更抽象的方式来表示文件路径,例如使用文件对象或文件句柄。这样可以提高代码的可移植性、可读性和可维护性。

对于不同编程语言和开发环境,可以使用相应的文件操作库或框架来处理文件路径。以下是一些常见编程语言的示例:

  • Python: 使用os.path模块来处理文件路径,例如os.path.join()函数用于拼接路径。
  • Java: 使用java.nio.file.Path类来表示文件路径,提供了一系列方法来操作路径。
  • JavaScript: 使用path模块(Node.js)或URL对象(浏览器环境)来处理文件路径。

总结:使用文件路径字符串作为参数初始化对象是一种不推荐的编码实践,应该使用更抽象的方式来表示文件路径,以提高代码的可移植性、可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编码和魔法值之间区别

它是一种将“不应该出现在源代码中东西”直接嵌入到源代码中实践。定义故意含糊不清:虽然大多数人都同意数据库连接字符串和日志文件目录不属于源代码,但存在许多灰色区域。...然而,我在本文中遇到问题是,它将硬编码使用魔法数字(或魔法字符串)之间区别混为一谈了。...维基百科对硬编码定义如下: 硬编码是指将输出或配置数据直接嵌入程序或其他可执行对象源代码或数据固定格式软件开发实践,而不是从外部来源获取数据,或者用给定输入在程序本身中生成数据或格式化。...维基百科对魔法值定义如下: “神奇数字”这个术语也指在源代码中直接使用数字而不作解释糟糕编程实践。在大多数情况下,这使得程序更难阅读、理解和维护。...更改一个神奇数字值是容易出错,因为相同值经常在程序不同位置使用多次 它促进了参数化。 硬编码是不好,因为它假定应该灵活信息实际上是固定不变

1.3K20

Play For Scala 开发指南 - 第2章 Scala基本语法

例如String类型上*方法用于将当前字符串重复n次并拼接为一个新字符串: "a".*(3) // "aaa" 但是这种写法可读性很糟糕,如果方法只包含一个参数,那么你可以省略"."...仔细瞧瞧::看起来是不是很像胶水,将列表头和尾紧紧地粘在一起,更进一步:::可以把两个列表粘在一起。这样代码是不是简洁,并且富有表达力呢!...Scala默认使用函数体最后一个表达式作为返回值。当然你仍然可以使用return语句指定返回值。...object作为伴生对象时必须和类在同一个源文件中定义,并且可以相互访问私有属性。...类有一个同名伴生对象List,那么你可以这样初始化一个列表: val list = List("a", "b", "c") 想想下面的Java版本,是不是感觉幸福感油然而生: List

64550

PHP没你想那么差

本文试着回答一些常见关于 PHP 断言,目的是向非技术人员解释,PHP 并不像许多人所说那么糟糕。 1它是不是鼓励糟糕实践? 不再是了。...随着框架引入,导致许多糟糕体验大部分通用代码现在都自动完成了;因此,开发人员只需使用框架,框架就可以正确地对其进行编码。...而且,这些年来,一些糟糕实践是由缺失特性造成,导致了一些本不应该被允许事情被允许。现在大多数情况下,甚至不可能实现以前编写一些东西来导致这种声誉。 小结 它不再鼓励糟糕实践......通过使用框架避免了糟糕实践。 语言特性现在有很多讨论。糟糕特性不再受到支持。 PHP 添加了其他语言中存在大部分(即使不是全部)特性。 2它安全性是不是很差?...通过使用自动加载程序(所有主流框架标配),避免了远程和本地文件包含。 通过使用模板语言作为标准或一种前端框架(例如 React),避免了跨站脚本(XSS)攻击。

41540

JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器

Servlet 容器创建一个 ServletRequest 对象,并将其作为参数传递给 Servlet service() 方法。...name) 返回一个字符串对象数组,其中包含给定请求参数所具有的所有值,如果该参数不存在,则返回空值 Enumeration getParameterNames() 返回包含此请求中包含参数名称字符串对象枚举...Servlet 容器创建 ServletResponse 对象,并将其作为参数传递给 servlet service() 方法。...Enumeration getInitParameterNames() 将 servlet 初始化参数名称作为字符串对象枚举返回,如果 servlet 没有初始化参数,则返回空枚举 ServletContext...() 将 servlet 初始化参数名称作为字符串对象枚举返回,如果 servlet 没有初始化参数,则返回空枚举 String getRealPath(String path) 返回包含给定虚拟路径实际路径字符串

83820

Python Unicode编码混乱 :来自大洋彼岸怨念

我最近处理了20年前当UTF-8还未成为文件名标准时数据。这些文件名在UNIX上仍然有效,可以用tar命令进行压缩或解压。但当你试图将文件名以字符串形式存储,编码错误便接踵而至。...我最近正在处理mtree生成数据,它使用八进制转义来处理文件名中特殊字符。我认为这对于Python会容易。结果… 许多错误解答 ——对于某些值,你会得到一个编码错误。...呃…好吧,我承认,自己一开始没注意到,踩过这坑… 因此,如果希望在Python中正确处理Unix文件名,你必须: 有一个完全避免Python字符串处理路径使用 sys....详情请参阅 PEP 0471:“与os模块中其他函数一样,scandir() 接受一个bytes或str类作为路径参数,并返回与路径类型相同 DirEntry.name 和 DirEntry.path...但是,强烈建议使用str类型,因为这样可以确保Unicode编码文件名得到跨平台支持(在Windows上,Python 3.3开始,就已经不支持bytes编码文件名了)。”

63950

【你不知道事】Javascript 中一种更安全 URL 读写方式

是不是有更好方法。URL构造函数可以拯救你! URL构造函数 一个更干净、更安全解决方案是使用 URL 构造函数,所有的现代浏览器中均支持它。...对于第一个参数,以及之后)。 所有参数都是自动编码。 对于长 url,在跨多行中断时没有额外空白字符风险。 修改url 对于我们正在修改URL但不知道当前状态情况,这也是非常有用。...从URL中完全删除一个参数: url.searchParams.delete('page') 注意点 要知道一个大陷阱是传递给 URL 构造函数所有 URL 都必须是绝对路径。...你可以通过提供一个 origin (源)作为第二个参数来解决这个问题,如下所示: new URL('/blog', 'https://blog.xxx') 或者,如果你真的只需要使用 URL 部分,你也可以直接使用...() URLSearchParams 还有另一个优点,那就是它可以把一个键值对对象作为输入: const params = new URLSearchParams({ page: 1, text

25720

干货 | 国外大神总结10个Java编程技巧!

讨论一下… 2 不要相信早期JDK APIs Java刚出现时候,编程一定是件痛苦事。那时API仍然不够成熟,你可能曾经遇到过这样一段代码: ? 看起来奇怪对吗?...也许吧,但是看看这个Javadoc: “如果抽象路径名表示不是一个目录,那么这个方法返回null。否则返回一个字符串数组,其中每个字符串表示当前目录下一个文件或目录。”...糟糕!前者违反了 Java 编码中 10 个微妙最佳实践规则#5和#6。因此一定要记得判 null检查!...3 不要相信“-1” 我知道这偏执,Javadoc中关于 String.indexOf() 早期描述是这样: “字符在字符序列中第一次出现位置将作为结果[被返回],如果字符不存在则返回-1。”...作为小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7 所有的变量和参数都用final声明 就像我说。我不相信自己不会无意间重写了某个值。这么说来,我的确一点都不相信自己。

60810

数据库连接池技术详解

优秀数据库连接池 首先,sun公司规定,连接池技术需实现javax.sql.DataSource接口,也就是说,如果你要自己实现数据库连接池,那么就必须实现这个接口.是不是牛比样子,实际上,作为标准制定方...使用起来就非常简单了.使用方式主要有两种,一种是硬编码方式,就是自己手动设置各种参数,另外一种就是配置相应配置文件,然后载入就行了....硬编码实现DBPC BasicDataSource dataSource = new BasicDataSource(); //参数配置:初始化连接数,最大连接数,连接字符串,驱动,用户,密码 dataSource.setInitialSize...使用c3p0同样是有两种方式,分别也是硬编码方式和配置文件方式....没错,只是这个是隐式调用,不需要你实现,只需要新建一个ComboPooledDataSource对象就行了,默认调用xml文件文件路径是src根目录.也就是说,你只需要将配置文件写在src目录下就行了

1.3K40

JAVA编程学习经验实践积累总结分享

/服务端会解析为服务器+项目名称) 客户端路径(js,css,html,jsp),使用绝对路径,用相对路径会出现问题,例如文件出现移动之后。...JQuery选择器作用:得到元素对象,然后才可以作为调用者或者是函数参数,js也是面向对象编程,没有编译器错误 信息提示,所以容易出错。11. 邮件发送??...*懒汉是不是在类加载时初始化实例化对象,不能保证对象唯一性,所以在多线程情况下尽管有 实例对象空值判断,也会产生线程安全问题,因为多线程是按照时间片来运行线程,破坏类代码 垂直执行顺序...多用对象方法,少用运算符,因为容易出错,例如:一般来说,Java程序里应该使用像a.equals(b)(比较字符串内容) 这样表达式,而不要用a==b(比较对象内存地址). 24....修改虚拟主机文件路径为:C:WINDOWS\system32\drivers\etc 9. WINDOWS盘符和文件使用:分隔 ,网络路径中协议和主机名使用://分隔。注:1.

75530

浅谈软件安全开发

编码安全 当前软件中都可能存在相同类别的内存安全漏洞,也可能存在于推理且无序执行路径中,包括但不限于缓冲区溢出、边界外数组访问、未初始化内存使用、类型混淆等漏洞。...一个套规范安全开发可以大大降低软件漏洞风险,安全开发通常需要我们在编码过程中做到 1、不要使用那些易受攻击API函数; 2、要做好对输入参数做校验; 3、慎重使用强制类型转换; 4、防止算术溢出和下溢...上图中函数strcpy 无法判断正在复制字符串对于目标缓冲区而言是否太大。其安全对应项 strcpy_s 会将缓冲区大小作为参数。因此,可以确定是否会发生缓冲区溢出。...6、外部可控函数 尽量减少使用外部可控数据作为启动函数参数例如:system、WinExec、ShellExecute、CreateProcess、execv、ececvp ,popen;如果外部可控作为这些函数参数...7、文件操作 对文件操作时候可以几个降低安全风险 1、当文件路径来自外部数据时候,需要先将文件路径规范化,这个没处理攻击者就会有机会通过恶意构造文件路径进行文件越权访问。

1.1K20

测试开发必备!webStorage 浏览器本地存储数据(附项目实战案例!)

,新增 todo 待办事项就会消失,这种体验是非常糟糕。...XXXStorage.setItem('key','value'); 该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应值。...XXXStorage.getItem('todo'); 该方法接受一个键名作为参数,返回键名对应值。...XXXStorage.removeItem('key'); 该方法接受一个键名作为参数,并把该键名从存储中删除。 XXXStorage.clear(); 该方法会清空存储中所有数据。...建议大家将本次分享中优化后代码片段替换原代码文件片段,再使用npm run serve重启服务,亲自实践感受下浏览器刷新是否还会丢失新增 todo 数据。

50610

代码之丑

建议:1、将参数列表封装成对象,在支付常见就是在proto文件中定义Message而不是平铺;2、动静分离,原本应该属于静态结构部分却以动态参数方式传来传去,无形之中拉长了参数列表,举例说明如下:...重构》第二版里新增了可变数据作为一种坏味道,如果需要更新,就产生一份新数据副本,而旧有的数据保持不变。...警惕:定义可修改全局变量也是危险行为。...null 值,但实际上个值并没有起到任何作用,从语义上说第一行变量初始化其实是没有用,这是一次假初始化。...优化:将state赋值逻辑封装为一个函数,EpubState state = XXX();建议:变量初始化最好一次性完成,能使用const就使用const。

62441

偏执却管用10条Java编程技巧

只要我们Options是真实存在(Java 8中 Optional是对可以为空对象进行封装),不是吗?...也许吧,但是看看这个Javadoc: “如果抽象路径名表示不是一个目录,那么这个方法返回null。否则返回一个字符串数组,其中每个字符串表示当前目录下一个文件或目录。”...前者违反了Java编码中10个微妙最佳实践规则#5和#6。因此一定要记得判 null检查! 3....不要相信“-1” 我知道这偏执,Javadoc中关于 String.indexOf() 早期描述是这样… “字符在字符序列中第一次出现位置将作为结果[被返回],如果字符不存在则返回-1。...因此除了接口(专门用于继承)都应该是严格 final。可以查看我们Java编码中10个微妙最佳实践#9。

74670

夯实Python基础(6)

(path) #转换path大小写和斜杠 os.path.isdir() 判断name是不是一个目录,name不是目录就返回false os.path.isfile() 判断name是不是一个文件,不存在返回...List,第一个元素是程序本身路径 sys.path 返回模块搜索路径初始化使用PYTHONPATH环境变量值 sys.modules.keys() 返回所有已经导入模块列表 sys.modules...() 返回将Unicode文件名转换成系统文件编码名字 sys.builtin_module_names Python解释器导入内建模块列表 sys.executable Python解释程序路径...参数safe指定了不需要编码字符 urllib.unquote(string) 对字符串进行解码 urllib.quote_plus(string[,safe]) 与urllib.quote类似,但这个方法用...() 跟文件对象使用一样 urlrs.readlines() 跟文件对象使用一样 urlrs.fileno() 跟文件对象使用一样 urlrs.close() 跟文件对象使用一样 urlrs.info(

1.2K20

国外大神总结 10 个 Java 编程技巧!

这是毫无疑问,把一种表达式转换成另一种更好表达式,并不会失去什么。只要我们Options是真实存在(Java 8中 Optional是对可以为空对象进行封装),不是吗?讨论一下… 2....也许吧,但是看看这个Javadoc: “如果抽象路径名表示不是一个目录,那么这个方法返回null。否则返回一个字符串数组,其中每个字符串表示当前目录下一个文件或目录。”...糟糕!前者违反了 Java 编码中 10 个微妙最佳实践规则#5和#6。因此一定要记得判 null检查! 3....不要相信“-1” 我知道这偏执,Javadoc中关于 String.indexOf() 早期描述是这样: “字符在字符序列中第一次出现位置将作为结果[被返回],如果字符不存在则返回-1。”...作为Java技术栈公众号小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7. 所有的变量和参数都用 final 声明 就像我说。我不相信自己不会无意间重写了某个值。

62620

国外大神总结 10 个 Java 编程技巧!

这是毫无疑问,把一种表达式转换成另一种更好表达式,并不会失去什么。只要我们Options是真实存在(Java 8中 Optional是对可以为空对象进行封装),不是吗?讨论一下… 2....也许吧,但是看看这个Javadoc: “如果抽象路径名表示不是一个目录,那么这个方法返回null。否则返回一个字符串数组,其中每个字符串表示当前目录下一个文件或目录。”...糟糕!前者违反了 Java 编码中 10 个微妙最佳实践规则#5和#6。因此一定要记得判 null检查! 3....不要相信“-1” 我知道这偏执,Javadoc中关于 String.indexOf() 早期描述是这样: “字符在字符序列中第一次出现位置将作为结果[被返回],如果字符不存在则返回-1。”...作为Java技术栈公众号小编,我敢肯定告诉你重写类/方法并不是一个好主意。 7. 所有的变量和参数都用 final 声明 就像我说。我不相信自己不会无意间重写了某个值。

2.2K20

太厉害了,这款开源类库可以帮你简化每一行代码

02、类型转换 类型转换在 Java 开发中常见,尤其是从 HttpRequest 中获取参数时候,前端传递是整形,但后端只能先获取到字符串,然后再调用 parseXXX() 方法进行转换,还要加上判空...当我们要读取文件时候,我是不建议使用绝对路径,因为操作系统不一样的话,文件路径标识符也是不一样。最好使用相对路径。...假设在 src/resources 下放了一个文件 origin.txt,文件路径参数如下所示: FileUtil.getInputStream("origin.txt") 假设文件放在 src/resources.../hutool 目录下,则路径参数改为: FileUtil.getInputStream("hutool/origin.txt") 05、字符串工具 Hutool 封装字符串工具类 StrUtil...、文件夹打包压缩是一件繁琐事情,Hutool 封装 ZipUtil 针对 java.util.zip 包做了优化,可以使用一个方法搞定压缩和解压,并且自动处理文件和目录问题,不再需要用户判断,大大简化压缩解压复杂度

63231

不要再重复造轮子了,这款开源工具类库贼好使!

02、类型转换 类型转换在 Java 开发中常见,尤其是从 HttpRequest 中获取参数时候,前端传递是整形,但后端只能先获取到字符串,然后再调用 parseXXX() 方法进行转换,还要加上判空...对应磁盘上目录如下图所示: 当我们要读取文件时候,我是不建议使用绝对路径,因为操作系统不一样的话,文件路径标识符也是不一样。最好使用相对路径。...假设在 src/resources 下放了一个文件 origin.txt,文件路径参数如下所示: FileUtil.getInputStream("origin.txt") 假设文件放在 src/resources.../hutool 目录下,则路径参数改为: FileUtil.getInputStream("hutool/origin.txt") 05、字符串工具 Hutool 封装字符串工具类 StrUtil...、文件夹打包压缩是一件繁琐事情,Hutool 封装 ZipUtil 针对 java.util.zip 包做了优化,可以使用一个方法搞定压缩和解压,并且自动处理文件和目录问题,不再需要用户判断,大大简化压缩解压复杂度

34630

Java IO流知识点总结

2.处理流类型 该类型是对一个已存在连接和封装,通过所封装功能调用实现数据读写,处理流构造方法总是要带一个其他流对象作为参数,一个流对象进过其他流多次包装,叫做流链接。...InputStreamReader(InputStream); //通过构造函数初始化使用是本系统默认编码表GBK。 2....如果要使用指定表编码表时,必须使用转换流, 即如果a.txt中文件字符数据是通过utf-8形式编码, 那么在读取时,就必须指定编码表,那么转换流时必须。...:1.字符串路径。...2.File对象 3.OutputStream PrintStream是一个字符打印流,它构造函数可以接受四种类型值:1.字符串路径

28010

48条高效率PHP优化写法

放在每个脚本文件第一行,或者用require_once()来加载,能有效保护敏感SQL查询和路径,在出错时不被显示。 2.7 不实用段标签<?...2.9 永远不要使用register_globals和magic quotes 这是两个古老功能,在当时(十年前)也许是一个好方法,但现在看来并非如此。...3.2 使用绝对路径 在include和require中尽量使用绝对路径。 如果包含相对路径,PHP会在include_path里面遍历查找文件。...用绝对路径就会避免此类问题,解析路径所需时间会更少。 3.3 包含文件 尽量不要用require_once和include_once包含文件,它们多一个判断文件是否被引用过程,能不用尽量不用。...5 数组 5.1 用字符串而不是数组作为参数 如果一个函数既能接受数组,又能接受简单字符做为参数,那么尽量用字符作为参数。 例如,字符替换函数,参数列表并不是太长,就可以考虑额外写一段替换代码。

2.4K110

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券