Delphi 2010 新增功能之: IOUtils 单元(3): TDirectory.GetFiles 支持通配符

本文提供了一个使用Delphi进行文件操作的例子,包括如何获取指定目录下特定前缀的文件列表,以及如何查找指定目录及其子目录中符合特定条件的文件。
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses IOUtils, Types;

const path = 'C:\Program Files\Embarcadero\RAD Studio\7.0';

//获取指定目录下有 Li 开头的文件
procedure TForm1.Button1Click(Sender: TObject);
var
  files: TStringDynArray;
  str: string;
begin
  files := TDirectory.GetFiles(path, 'Li*.*');
  Memo1.Clear;
  for str in files do Memo1.Lines.Add(str);
end;

//获取指定目录及其子目录下文件名只有 3 个字母的 pas 文件
procedure TForm1.Button2Click(Sender: TObject);
var
  files: TStringDynArray;
  str: string;
begin
  files := TDirectory.GetFiles(path, '???.pas', TSearchOption.soAllDirectories);
  Memo1.Clear;
  for str in files do Memo1.Lines.Add(str);
end;

end.

 
 
 
 
 

 

 

  

转载于:https://my.oschina.net/hermer/blog/319227

javax.script.ScriptException: Sourced file: inline evaluation of: ``import org.apache.commons.io.IOUtils; import java.util.zip.GZIPOutputStream; . . . '' : Typed variable declaration : at Line: 4 : in file: inline evaluation of: ``import org.apache.commons.io.IOUtils; import java.util.zip.GZIPOutputStream; . . . '' : .getValue ( ) Target exception: java.lang.NullPointerException: Attempt to invoke method getValue on null value in inline evaluation of: ``import org.apache.commons.io.IOUtils; import java.util.zip.GZIPOutputStream; . . . '' at line number 4 at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:87) at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:46) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:219) at org.apache.jmeter.modifiers.UTPJSR223PreProcessor.process(UTPJSR223PreProcessor.java:109) at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:965) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:549) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException: Attempt to invoke method getValue on null value at bsh.Reflect.resolveExpectedJavaMethod(Reflect.java:378) at bsh.Reflect.invokeObjectMethod(Reflect.java:74) at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:170) at bsh.BSHPrimarySuffix.doSuffix(BSHPrimarySuffix.java:114) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:74) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:41) at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:80) at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:78) at bsh.Interpreter.eval(Interpreter.java:659) at bsh.Interpreter.eval(Interpreter.java:750) at bsh.Interpreter.eval(Interpreter.java:739) at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:78) ... 9 more
最新发布
08-28
在 JMeter 中使用 BeanShell 时,若脚本抛出 `ScriptException` 并提示 `NullPointerException`,通常表示在执行 BeanShell 脚本时尝试访问了一个未初始化(即为 `null`)的对象的属性或方法。以下是几种常见原因及对应的解决方法: ### 常见原因及解决方法 #### 1. 变量未正确设置或未获取到值 如果脚本中引用了某个变量(例如通过 `vars.get("variableName")` 获取),但该变量在 JMeter 中尚未设置或未正确传递,则会抛出 `NullPointerException`。 **解决方法:** - 在脚本前添加日志输出,检查变量是否已正确赋值。 - 使用 `if` 语句进行空值判断,避免直接操作可能为 `null` 的对象。 ```java String myVar = vars.get("myVar"); if (myVar != null) { // 执行操作 } else { log.error("变量 myVar 未设置"); } ``` #### 2. 使用 JSON 或其他对象时类未导入或对象未正确解析 如果在脚本中使用了 `JSONObject` 或 `JSONArray` 等对象,但未正确导入相关类或未能正确解析字符串为对象,也会导致空指针异常。 **解决方法:** - 确保引入了正确的类,例如使用 FastJSON 时应导入 `com.alibaba.fastjson.JSONObject`。 - 在解析 JSON 字符串前检查其是否为 `null` 或空字符串。 ```java String jsonString = vars.get("jsonString"); if (jsonString != null && !jsonString.isEmpty()) { JSONObject jsonObject = JSONObject.parseObject(jsonString); // 继续处理 } else { log.error("JSON 字符串为空"); } ``` #### 3. 使用外部 JAR 包中的类时,JAR 包未正确加载 如引用[3]所述,如果使用了 `JSONObject` 等类但未将对应的 JAR 包(如 `json.jar`)放入 `${JMETER}/lib/` 目录,会导致类找不到或对象无法实例化,从而可能引发空指针异常。 **解决方法:** - 确保所需的 JAR 文件已放置在 JMeter 的 `lib` 目录中。 - 重启 JMeter 以确保类路径更新。 #### 4. BeanShell 脚本中未正确处理异常 未使用 `try-catch` 块捕获异常,导致运行时错误未被处理,抛出 `ScriptException` 包裹的 `NullPointerException`。 **解决方法:** - 在脚本中加入异常捕获机制,便于调试和容错。 ```java try { String value = vars.get("nonExistentVar").toUpperCase(); } catch (NullPointerException e) { log.error("变量为 null,无法调用方法", e); } ``` #### 5. 使用 `props` 获取全局变量时未正确设置 如引用[4]中提到的使用 `props` 设置全局变量,若尝试通过 `props.get("token")` 获取值但未提前设置该属性,也会导致空指针异常。 **解决方法:** - 在使用前确保全局属性已正确设置。 - 使用 `if` 判断属性是否存在。 ```java if (props.containsKey("token")) { String token = props.get("token"); // 使用 token } else { log.error("全局属性 token 未设置"); } ``` ### 总结 处理 JMeter BeanShell 中的 `NullPointerException` 关键在于: - 检查变量和对象是否为 `null` - 确保类路径和依赖库正确 - 使用条件判断和异常处理机制提高脚本健壮性 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值