`
helin
  • 浏览: 148683 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

处理文件夹有空格问题及按系统方式打开文件

    博客分类:
  • java
阅读更多
[size=medium]取得文件路径:
String filePath=  xxx.class.getResource("/").getPath();
处理:
filePath=URLDecoder.decode(filePath);
完成.

按系统方式打开文件:
Runtime.getRuntime().exec("cmd /c start "+filePath);

=================================================================================
修改:

原用上面的方式按系统方式打开文件,结果出现空格问题,不好弄。最后想到Dos的8.3短文件名方式不会出现空格,,于是写了一个求短文件名的方法:
        /**
	 * 8.3DOS短文件名规则
	 * @param srcFileName
	 * @return
	 */
	private static String get8Dot3Name(String srcFileName) {
		StringBuffer sb;
		srcFileName = srcFileName.toUpperCase();
		if (srcFileName.getBytes().length > 8
				|| ((srcFileName.getBytes().length < 8) && srcFileName
						.indexOf(" ") >= 0)) {

			srcFileName = srcFileName.replaceAll(" ", "");
			sb = new StringBuffer(srcFileName);
			while (sb.indexOf(".") != sb.lastIndexOf(".")) {
				sb.setCharAt(sb.indexOf("."), ' ');
			}
			srcFileName = sb.toString().replaceAll("[ $<>;,=\"\\[\\]]", "");
			if (srcFileName.lastIndexOf('.') == srcFileName.length() - 1) {
				srcFileName = srcFileName
						.substring(0, srcFileName.length() - 1);
			}
			String name = null;
			String type = null;
			if (srcFileName.lastIndexOf(".") > -1) {

				name = srcFileName.substring(0, srcFileName.indexOf("."));
				type = srcFileName.substring(srcFileName.indexOf("."));

				if (name.getBytes().length > 8) {
					name = cut6Char(name);
				}
				if (type.getBytes().length > 4) {
					type = type.substring(0, 4);
				}
			} else {
				if (srcFileName.getBytes().length > 8) {
					name = cut6Char(srcFileName);
				} else {
					name = srcFileName;
				}
			}
			name += "~1";
			if (type != null) {
				name += type;
			}
			return srcFileName = name;
		}
		return srcFileName;
	}

	private static String cut6Char(String name) {
		byte[] bt = new byte[6];
		byte nameBytes[] = name.getBytes();
		for (int i = 0; i < 6; i++) {
			bt[i] = nameBytes[i];
		}
		name = new String(bt);
		return name;
	}
        /**
	 * 取得短文件名
	 */
	public static String getShortName(String filePath) {
		filePath=filePath.replaceAll("\\\\", "/");
		String[] str = filePath.split("/");
		for (int i = 0; i < str.length; i++) {
			str[i] = get8Dot3Name(str[i]);
		}
		StringBuffer sbf = new StringBuffer();
		for (int i = 0; i < str.length; i++) {
			sbf.append(str[i] );
			if(i!=str.length-1){
				sbf.append("\\");
			}
		}
		return sbf.toString();
	}


好。。。到这里先试了一把。。。——!结果出人意料。。。有的可以打开有的打不开。。。
原来我这个方法是只针对一个路径来做的。。也就是说相同目录下有多个文件可以得到这个路径,
于是上网又找,终于找到了。。
[color=violet]1.如何执行非系统注册的命令比如Windows的dir
请使用命令 "cmd /c dir"
其他情况类似
2.如何打开带空格的外部文件或文件夹
最基本的打开外部文件的方式 "cmd /c start 文件",若文件名有空格,则会出现错误,请使用以下方式解决
String[] cmd = new String[5];
cmd[0] = "cmd";
cmd[1] = "/c";
cmd[2] = "start";
cmd[3] = " ";
cmd[4] = filePath;
Process process = Runtime.getRuntime().exec(cmd);

或;
Process process = Runtime.getRuntime().exec("cmd /c start \"\" \"E:\\kk sd\\www.txt\"");

因为按找文档说明 start 命令之后首先是[title],再是[filepath],所以将title设置为 " "


3.调用外部程序来打开一个相应的文件
比如我们要使用Editplus来打开一个远程机器上的文件,可以这样

Runtime.getRuntime().exec("D:\\EditPlus 2\\EditPlus.exe"+" "+\\\\172.16.1.6\\server1\\SystemErr.log)即
Runtime.getRuntime().exec("外部程序位置"+" "+"要打开的文件").
以此方式可以忽略空格的问题

4.截取控制台的信息.
使用JAVA输入流的方式.
Runtime.getRuntime().exec(..)获取的Process;
Process pro = Runtime.getRuntime().exec(..);
InputStreamReader isr = new InputStreamReader (pro.getInputStream());
//todo 使用输入流进行操作就可以了.[/color]


另外JDK6也提供了一种方式
Desktop dsk=DeskTop.getDesktop();
dsk.open(new File(filePath));
[/size]
分享到:
评论
2 楼 helin 2009-03-03  
wxlwxq 写道

如果是带数字和小数点,结果会不对

因为找到了系统命令,解决了当时的问题.所以也就没有多做测试,上面也说了,有打可以打开,有的打不开..说明有问题的.~~~~——!
网上也有好多例子,如果用.net会很容易做到,这里只是一个简单的算法,8.3命名规则要考虑好些情况.比如如果只有一个文件,那么取这个文件的短文件名可以,但是如果有多个文件,取得短文件名一样,8.3命名规则会按数字排列,因为当时不可能把所有的都算出来,然后再排一下,操作系统知道哪个在前哪个在后.:),就用原生的吧~
1 楼 wxlwxq 2009-02-19  
如果是带数字和小数点,结果会不对

相关推荐

    chrome打开共享文件夹完美方案

    背景 在IE8下通过a标签的href="本地路径"可以打开,但是chrome以及firefox不可以。 原因:在IE中输入file:///c:...最后在bat脚本里根据文件【cmdInput.txt】里面的路径直接使用shexec"open"命令打开文件或文件夹。

    bat批处理文件实现复制、删除、创建文件夹、执行程序、打开文件

    要包含上一示例中的任何系统或隐藏文件,请按如下所示添加 /h 命令行选项: xcopy a:b:/s /e /h 要使用 \Rawdata 目录中 1993 年 12 月 29 日后更改的文件更新 \Reports 目录中的文件,请键入: xcopy \rawdata ...

    高速批量删除文件和文件夹主要解决「被其他程序打开的文件和文件夹」无法删除的文件.exe

    一款适用于 Windows 的工具,具有多种功能,包括高速删除文件和文件夹,可...或空格结尾的文件夹,能解决被其他程序打开的文件和文件夹无法删除的问题,还可删除映射文件、正在运行的程序以及正被使用的动态运行库。

    TXT文件批量处理工具.rar

    其他处理方式:包括添加文件夹、重命名、恢复备份文件、查找个数、转换编码、重新排序。 26、添加文件夹,就是直接添加一个文件夹,说明添加文件或者添加文件夹的时候,如果已经存在则跳过添加。说明:添加文件夹的...

    XP系统文件被破坏的恢复方法

    系统文件被破坏,很有可能将导致电脑无法正常启动,该如何解决此问题呢?其中的方法就是恢复被破坏的系统文件。今天u大师就为大家讲解下如何修复系统文件? WindowsXP的系统文件被病毒或其它原因破坏了,可以从...

    windows文件夹图标批量修改工具

    这是一个方便管理windows文件系统的辅助工具,能很轻松的实现windows文件夹图标的更改,jar包中只预置了30来种图标,不过在resource文件夹里面有我不辞辛劳制作的大量可用图标可以选用(千万注意该jar包所在的路径不...

    什么是tbi文件?.docx

    这样系统会关联打开方式,文件的图标里就有一个打开方式的程序的小图标。 TBI 文件的特点 TBI 文件是一种图片文件格式,可以直接将后缀 .tbi 改成 .jpg,变成常见的图片显示方法打开。这种文件格式可以使用批处理...

    文件夹隐藏属性无法修改怎么办.docx

    在今天的文件中,我们讨论了一个常见的问题:文件夹隐藏属性无法修改怎么办?这个问题通常是由于系统文件被病毒或木马篡改导致的。在这种情况下,文件夹的隐藏属性将被置灰不能修改,从而导致文件夹无法访问。 解决...

    文件浏览增强工具 Listary Pro 5.00 Build 2843.zip

    Windows 系统发展了几十年,版本更新了数代,但系统中文件打开/保存对话框的操作方式却没有多少改善,即使在目前最新的 Windows 8.1 中,在该对话框中浏览文件的方式依然如此繁琐、低效,一直为大多数用户所诟病。...

    SourceInsight跳转到文件夹插件1.2.1版

    第四,点击你打开的文件,按下Ctrl+T,你会发现自动显示了项目文件浏览器(Project File Browser)窗口,并跳转到当前文件所在的目录。 第五,你可以使用同样的方式调用宏Macro: ToExplorerFolder,它的作用是在资源...

    Windows空格预览,Win版QuickLook

    Windows下实现空格预览文件的小工具,Win版Mac的空格预览。实现快捷浏览文件。可以快速查看文件夹大小,预览各种文档,图片。

    DOS命令-批量创建文件夹-批处理文件-原创小工具【我想设置积分为1,怎么设置?谢谢!】

    使用方法:解压后,右键-编辑,打开.bat文件,然后编辑要创建的文件夹名字列表,保存、关闭即可。注意不要删除md字样。 友情提示:如果需要创建大量文件夹,可以用excel或记事本事先编辑好“md+空格+文件名”,一个...

    Excel 批量创建文件夹.docx

    在表格中的 A 列输入"md'(后面有个空格),在 B 列输入要创建的文件夹的路径,C 列输入文件夹的名称。用户可以手动输入人名或通过复制粘贴的方法来输入人名。 第二步,接着,在 D 列输入"=A1&B1&C1",然后拉单元格右...

    excel批量创建新建文件夹?.docx

    在表格中的 A 列输入 "md "(后面有个空格),B 列输入要创建的文件夹的路径,C 列输入文件夹的名称,这里可以通过手动或者复制粘贴来输入人名。例如,如果您想要创建一个名为 "John" 的文件夹,在 C 列中输入 "John...

    VB图片浏览标记器源代码

    在标记处理窗口保存勾选标记后请不要改动该文件夹的位置、文件夹里的文件,不然下次读取的时候会出现错误设置里的按键模式,直接用鼠标点击文本框,然后用键盘按下按键即可设置成功,代码模式需要查看代码(图片)...

    文件转换监视器

    本程序与文件上传配合使用,主要功能是监视"路径一"所指的文件夹如发现用户有上传的文件,则将其转移到"路径二"文件夹下,并转换为swf格式。swf格式文件将被放在"路径三"文件夹下。(路径名不可有空格) 注意: 一、...

    绿盾解密无需申请审批,绿盾加密文件解密的工具,使用java -jar fileDecrypt-1.0.1.jar 需要解密的文件

    既然软件能直接打开,说明软件访问的是源文件不是绿盾的快捷文件,通过程序直接利用系统底层拷贝将源文件拷贝至新文件夹,我们就可以看到未加密的文件了。 注意事项: 1. 如果是路径包含空格,可以将路径用英文双...

    计算机基础统考题操作系统应用.pdf

    17. 文件夹图标:在Windows的"资源管理器"左部窗口中,若显示的文件夹图标前带有加号(+),意味着该文件夹含有下级文件夹。 八、文件命名 18. 文件扩展名:在Windows中,文件名READ.ME.NEXT.TXT的扩展名是TXT。 ...

    打开U盘程序的最快速方法.docx

    在后面如果接的是文件或文件夹,会以默认程序打开,当然你若希望带参数运行或使用自己的程序打开文件,还是可以在文件路径前加上相应的程序路径和参数。 例如,在最后一行命令中,EXPLORER.EXE 是指定的打开程序,...

    ZIP文件监控并自动解压替换目标文件并备份

    在第一次安装后,需要去到系统服务那边手动打开运行服务。以后只要服务器重启,服务就会自动启动,就算管理员没登录都会自动运行。 服务启动后会监视配置的路径,当监视的路径下有ZIP文件产生的时候(FTP上传、复制、...

Global site tag (gtag.js) - Google Analytics