java.net.MalformedURLException: unknown protocol: c问题解决(log4j2)

解决Log4j2配置文件加载时的MalformedURLException
文章讲述了在处理Log4j2配置文件时遇到的java.net.MalformedURLException,问题源于将配置文件误作URL处理。解决方案是在文件路径前添加file:///.通过这个修正,可以避免报错并正常运行程序。

小结

在对Log4j2的配置文件进行处理时,碰到了java.net.MalformedURLException: unknown protocol: c问题的问题,进行了解决。

问题

这个问题网上很多地方都给出了答案,由于程序将配置文件当成了URL进行了处理,会报异常,但报此错误后,并不影响后续程序运行。

解决

根据建议,在加载配置文件时,在文件路径字符串前面加上file:///可以解决这个报错。如下:

String logProperties_file = "file:///" + logProperties_str;

参考

Stackoverflow: Exception in thread “main” java.net.MalformedURLException: unknown protocol: c
博客园: 解决java.net.MalformedURLException: unknown protocol: c问题

2025-09-18 17:20:47,932 INFO o.a.j.e.StandardJMeterEngine: Running the test! 2025-09-18 17:20:47,932 INFO o.a.j.s.SampleEvent: List of sample_variables: [] 2025-09-18 17:20:47,932 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*) 2025-09-18 17:20:47,967 INFO o.a.j.e.StandardJMeterEngine: No enabled thread groups found 2025-09-18 17:20:47,967 INFO o.a.j.e.StandardJMeterEngine: Starting tearDown thread groups 2025-09-18 17:20:47,967 INFO o.a.j.e.StandardJMeterEngine: Starting tearDown ThreadGroup: 1 : tearDown 线程组 2025-09-18 17:20:47,967 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group tearDown 线程组. 2025-09-18 17:20:47,967 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error 2025-09-18 17:20:47,967 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false 2025-09-18 17:20:47,967 INFO o.a.j.t.ThreadGroup: Started thread group number 1 2025-09-18 17:20:47,968 INFO o.a.j.t.JMeterThread: Thread started: tearDown 线程组 1-1 2025-09-18 17:20:47,991 ERROR o.a.j.m.JSR223PreProcessor: Problem in JSR223 script, JSR223 预处理程序 javax.script.ScriptException: java.net.MalformedURLException: Illegal character found in host: '/' at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16] at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16] at javax.script.CompiledScript.eval(CompiledScript.java:93) ~[java.scripting:?] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.1.1 r1855137] at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137] at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137] at java.lang.Thread.run(Thread.java:1474) [?:?] Caused by: java.net.MalformedURLException: Illegal character found in host: '/' at java.net.URL.<init>(URL.java:529) ~[?:?] at java.net.URL.<init>(URL.java:414) ~[?:?] at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.getUrl(HTTPSamplerBase.java:1055) ~[ApacheJMeter_http.jar:5.1.1 r1855137] at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase$getUrl$16.call(Unknown Source) ~[?:?] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-all-2.4.16.jar:2.4.16] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) ~[groovy-all-2.4.16.jar:2.4.16] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) ~[groovy-all-2.4.16.jar:2.4.16] at Script28.run(Script28.groovy:38) ~[?:?] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321) ~[groovy-all-2.4.16.jar:2.4.16] ... 9 more 2025-09-18 17:20:47,992 INFO o.a.j.t.JMeterThread: Thread is done: tearDown 线程组 1-1 2025-09-18 17:20:47,992 INFO o.a.j.t.JMeterThread: Thread finished: tearDown 线程组 1-1 2025-09-18 17:20:47,992 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test 2025-09-18 17:20:47,992 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)
最新发布
09-19
<el-table v-loading="loading" :data="nasList"> <el-table-column label="deptId" align="center" prop="deptId"> </el-table-column> <el-table-column label="fileName" align="center" prop="fileName"> <template #default="scope"> <el-link type="primary" @click="handleDownload(scope.row)"> {{ scope.row.fileName }} </el-link> </template> </el-table-column> <el-table-column label="userName" align="center" prop="username"> </el-table-column> </el-table> function handleDownload(row) { // 使用GET请求 window.open( `http://127.0.0.1:9404/upload/download?fileName=${encodeURIComponent( row.fileName )}`, "_blank" ); } // 斷點下載(支援 Range) @GetMapping("/download") public void download(@RequestParam String fileName, HttpServletRequest req, HttpServletResponse resp) throws IOException { fileUploadService.download(fileName, req, resp); } public void download(String fileName, HttpServletRequest req, HttpServletResponse resp) throws IOException { init(); try (DiskShare share = (DiskShare) session.connectShare(SHARE_NAME)) { String nasPath = NAS_UPLOAD_PATH + "/" + fileName; if (!share.fileExists(nasPath)) { resp.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } //获取到目标文件夹 com.hierynomus.smbj.share.File remoteFile; try { remoteFile = share.openFile(nasPath, EnumSet.of(AccessMask.GENERIC_WRITE), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OVERWRITE_IF, null); } catch (Exception e) { log.error("Error opening remote file for writing: {}", nasPath, e); throw new IOException("Failed to open file for writing: " + nasPath); } long fileLength = remoteFile.getFileInformation().getStandardInformation().getEndOfFile(); String range = req.getHeader("Range"); long start = 0, end = fileLength - 1; if (range != null && range.startsWith("bytes=")) { String[] parts = range.replace("bytes=", "").split("-"); start = Long.parseLong(parts[0]); if (parts.length > 1 && !parts[1].isEmpty()) end = Long.parseLong(parts[1]); resp.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); } else { resp.setStatus(HttpServletResponse.SC_OK); } long contentLength = end - start + 1; resp.setHeader("Content-Type", "application/octet-stream"); resp.setHeader("Content-Length", String.valueOf(contentLength)); resp.setHeader("Content-Range", "bytes " + start + "-" + end + "/" + fileLength); resp.setHeader("Accept-Ranges", "bytes"); try (InputStream smbIn = remoteFile.getInputStream(); ServletOutputStream out = resp.getOutputStream()) { smbIn.skip(start); // 跳过开始位置 byte[] buffer = new byte[8192]; long remaining = contentLength; int len; while ((len = smbIn.read(buffer, 0, (int) Math.min(buffer.length, remaining))) > 0) { out.write(buffer, 0, len); remaining -= len; } out.flush(); } NasFileInfo fileInfo = fileInfoMapper.selectOne( new LambdaQueryWrapper<NasFileInfo>().eq(NasFileInfo::getFileName, fileName) ); if (fileInfo != null) { NasDownloadLog log = new NasDownloadLog(); log.setFileId(fileInfo.getId()); log.setFileName(fileName); log.setUsername(SecurityUtils.getUsername()); // 自行實作獲取使用者名稱 log.setIpAddress(req.getRemoteAddr()); log.setUserAgent(req.getHeader("User-Agent")); log.setDownloadTime(LocalDateTime.now()); nasDownloadLogMapper.insert(log); } } } 这是一个点击前端触发下载的全过程 10:08:39.416 [com.alibaba.nacos.client.remote.worker.0] INFO c.a.n.client.naming - [onConnected,90] - Grpc connection connect 10:08:39.416 [com.alibaba.nacos.client.naming.grpc.redo.0] ERROR c.a.n.c.r.client - [printIfErrorEnabled,102] - Send request fail, request = InstanceRequest{headers={app=unknown}, requestId='null'}, retryTimes = 0, errorMessage = java.util.concurrent.ExecutionException: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: Channel shutdown invoked 10:08:39.438 [XNIO-1 task-2] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,112] - 请求地址'/upload/download',发生未知异常. com.hierynomus.mssmb2.SMBApiException: STATUS_INVALID_PARAMETER (0xc000000d): Create failed for \\10.32.5.80\AnyshareBAK\\upload\bsc_template_1752474167013.xlsx at com.hierynomus.smbj.share.Share.receive(Share.java:371) at com.hierynomus.smbj.share.Share.sendReceive(Share.java:351) at com.hierynomus.smbj.share.Share.createFile(Share.java:159) at com.hierynomus.smbj.share.DiskShare.createFileAndResolve(DiskShare.java:97) at com.hierynomus.smbj.share.DiskShare.resolveAndCreateFile(DiskShare.java:79) at com.hierynomus.smbj.share.DiskShare.open(DiskShare.java:66) at com.hierynomus.smbj.share.DiskShare.exists(DiskShare.java:193) at com.hierynomus.smbj.share.DiskShare.fileExists(DiskShare.java:172) at com.ruoyi.nas.service.FileUploadService.download(FileUploadService.java:198) at com.ruoyi.nas.controller.FileUploadController.download(FileUploadController.java:55)后端提示错误
07-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值