首页
学习
活动
专区
工具
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

67250
  • PHP没你想的那么差

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

    43040

    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) 返回包含给定虚拟路径的实际路径的字符串

    89720

    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编码的文件名了)。”

    66450

    【你不知道的事】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

    36220

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

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

    62610

    数据库连接池技术详解

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

    1.4K40

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

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

    78030

    浅谈软件安全开发

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

    1.3K20

    代码之丑

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

    68041

    JavaEE初阶---文件IO总结

    ,绝对路径相对录得等相关的知识; 2.java针对于文件的操作 2.1文件系统的操作—file类 pathSeparator----文件的路径的分隔符号; 在我们的这个windows上面,其实无论是正斜杠还是反斜杠这个都是可以作为我们的路径分隔符的...; File对象表示的就是这个硬盘上面的文件,在进行这个对象的构造的时候,需要把这个文件的路径作为参数进行指定; 下面的这个展示的就是我们的这个新创建的这个对象里面的这个对应的可以使用的一些方法: getpath...,但是这个.的存在其实是可有可无的,因此可以理解为这个getCanonical方法就是对于这个绝对路径获取结果的一个简化的操作; 查看这个文件是不是存在的; 查看这个文件是不是一个目录结构; 查看这个是不是一个文件...scanner类和对象的相关的操作; 我们之前使用的这个scanner类创建的对象用来在这个屏幕上面进行输入,这个参数是这个system.in,这个参数其实就是我们的InputerStream这个类里面的...; 分析:其实就是让用户输入一个路径,我们对于这个路径里面的所有的文件一层一层的进行遍历,然后输入这个字符串,看看遍历的过程中这个路径对应的这个文件是不是包含我们的字符串,询问用户是不是进行删除; 1.

    6200

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

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

    76370

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

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

    2.3K20

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

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

    63820

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

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

    55210

    夯实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

    Python3 | 练气期,入门精简基础语法!

    默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串,此外也可以为源码文件指定不同的编码,只需要在文件开头加入 # -*- coding: gbk-2312...例如,在 Ubuntu 24.04 TLS 中指定解释器路径及其编码格式 # 推荐 先在 env(环境变量)设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。 #!.../usr/bin/env python3 # 推荐 指明源码文件的字符编码位为 utf-8 # -*- coding: utf-8 -*- 4.行与缩进 Python 编程语言不再像其他语言一样使用大括号...在 Python 中使用 print() 函数实现格式化输出类似于 C/C++ 的 printf 函数,方法是使用 % 操作符,它会将左边的字符串当做格式字符串,将右边的参数代入格式字符串:print(..."100 + 200 = %d" % 300), 若带入多个参数,则需要用() 包裹代入的多个参数,参数之间用逗号隔开,参数的顺序应该对应格式字符串中的顺序:print("%s %s" % ("world

    14410

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

    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 包做了优化,可以使用一个方法搞定压缩和解压,并且自动处理文件和目录的问题,不再需要用户判断,大大简化的压缩解压的复杂度

    67231
    领券