JTextArea.getText()读取文本遇空格截断,求解决方法
问题根源与解决方案
JTextArea.getText()实际上已经读取了完整文本,你遇到的“读到第一个空格就停止”的问题,是因为执行Runtime.getRuntime().exec()时,没有对包含空格的文件路径做特殊处理,导致命令被空格分割成多个无效参数,而非文本读取不全。
解决方案一:给文件路径添加双引号(推荐)
在拼接命令时,用转义的双引号包裹文件路径,让CMD将其识别为单个完整参数:
Send.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ try { String file = text.getText(); // 给file路径添加双引号转义 Runtime.getRuntime().exec("cmd /k start cmd.exe /K \"cd C:\\Program Files (x86)\\CAREL\\Sparkly && Sparkly.exe configurations apply --connection Serial,COM8,192008N2,199 --src \"" + file + "\""); } catch (IOException ex) { ex.printStackTrace(); // 打印异常便于排查问题 } } });
解决方案二:移除路径中的空格(不推荐)
仅当你确认原文件路径可以去掉空格,且文件实际存在于无空格路径下时,可使用字符串替换移除空格:
String file = text.getText().replaceAll(" ", ""); // 移除所有空格
此方法可能导致文件找不到,仅作为备选方案。
更可靠的替代方案:使用ProcessBuilder
ProcessBuilder能更好地处理带空格的参数,避免字符串拼接的引号转义问题:
Send.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ try { String file = text.getText(); // 设置工作目录到Sparkly所在路径 File workingDir = new File("C:\\Program Files (x86)\\CAREL\\Sparkly"); // 拆分命令为独立参数,无需处理空格 ProcessBuilder pb = new ProcessBuilder( "Sparkly.exe", "configurations", "apply", "--connection", "Serial,COM8,192008N2,199", "--src", file ); pb.directory(workingDir); // 启动新CMD窗口执行命令 new ProcessBuilder("cmd.exe", "/k", String.join(" ", pb.command())).start(); } catch (IOException ex) { ex.printStackTrace(); } } });
内容的提问来源于stack exchange,提问作者Hansen85
相关产品推荐
相关产品推荐

