Runtime.getRuntime().exec("mv -f /home/aaa/'oldName bb.txt' /home/aaa/newName.txt");
现在 aaa 目录下,有"oldName bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以
在java 中调用时,要怎么将这个' 进行转换了?
现在 aaa 目录下,有"oldName bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以
在java 中调用时,要怎么将这个' 进行转换了?
谢谢你
不是这个意思是在ftp 上有一个文件我在用java 对这个文件进行重命名
但文件包含空格,在liunx 中文件名前后加上'' 即可
用java 命令调,也是要求前后加上‘’ ,
但不能直接输入,要转换才可起到效果,现不知道用什么转换
否则找不到
public Process exec(String command) throws IOException {
return exec(command, null, null);
}上面那样写是不可以的
那么到liunx 中去的时候,也就成了 /home/aaa/[oldName bb.txt] 这样liunx不会找到这个目录/home/aaa/‘oldName bb.txt’ 要是能这样就行了
但在java 中加个什么转换下 ' 了,如果不加\\
/home/aaa/‘oldName bb.txt’到liunx 中后就成了 /home/aaa/\‘oldName bb.txt\’他自己加上了个\ ,这样也就找不到目录了
import java.io.File;
/**
* @author troy(J2EE)
* @version 1.0 1995年的3月23日
*/
public class Test {
public static void main(String[] args) { File file = new File("d:\\1 这是一个测试文件.txt"); File file2 = new File("d:\\2.txt"); boolean success = file.renameTo(file2); if (!success) { System.out.println("重命名失败"); } else { System.out.println("重命名成功"); } }}
import java.io.File;
/**
* @author troy(J2EE)
* @version 1.0 1995年的3月23日
*/
public class Test {
public static void main(String[] args) { File file = new File("/home/tomcat/tmp/1 这是一个测试文件.txt"); File file2 = new File("/home/tomcat/tmp/1.txt"); boolean success = file.renameTo(file2); if (!success) { System.out.println("重命名失败"); } else { System.out.println("重命名成功"); } }
3)javac Test.java ; java Testoutput:
---------------------------------------------------------------------------
[tomcat@localhost tmp]$ ls
1 这是一个测试文件.txt Test.class Test.java
[tomcat@localhost tmp]$ java Test
重命名成功
[tomcat@localhost tmp]$ ls
1.txt Test.class Test.java
根据不用的操作系统,而选择/ or \
String lsSlash = asFullPath.lastIndexOf("\\") != -1 ? "\\" : "/";
谢谢你的回答
如果此时操作到文件迁移你怎么办了?难道还用java流去读写?这时可以利用liunx 命令很快的完成,存在空格是逃避不了的
谢谢
早试过了,这些没用我只能上这个论谈,在liunx 中 单引号 双引号 反斜杠都有不同的含义,
对于文件操作 java.io.file 提供的大量的实用(改名 、删除、写文件等)方法,文件迁移自然不在话下。使用Java去执行 linux 命令 ,也就让java丧失了可移植性,因为代码依赖于linux 的shell命令,这样的代码到windows上就不能使用了。使用流 先进行读取 有几个好处:1)可以捕获一些异常(FileNotFound 、IOException……)2)可移植
mv -f /home/aaa/'oldName\ bb.txt' /home/aaa/newName.txt
public class Test {
public static void main(String[] args) {
try {
String[] commd={"mv","/home/tomcat/tmp/1 name.txt","/home/tomcat/tmp/2.txt"};
Process p = Runtime.getRuntime().exec(commd);
p.destroy();
} catch (Exception e ) {
e.printStackTrace();
}
}
}
记得 有空格或者 特殊字符的时候 请使用Runtime.getRuntime().exec(String[]) 的方式
还有一个,如果真有人把环境放windows下了,那么也是可以做配置项目的用命令来重定向,这样效率肯定高于你直接去读流完成Process proc = Runtime.getRuntime().exec使用这个方法,是可以try到异常 的
proc.getErrorStream()流
这样就可以看到错误信息了谢谢你了
在liunx 中用\是可以替换空格
但空格又包含半角,全角,还有要替换所有空格这样很麻烦,所以不可取用
谢谢你的回答
不知道你有没有看过源码传数组只是他自己内部进行封装下,和传全部str 没什么本质区别
问题解决了
昨天下午没上班
又不能上网,
今天早上来想了下,在学校操作系统书中,最基本的操作
我们在window 下操作时,前面可以带cmd -c ,有些时候可以省了,也可以
其实在liunx 下也是一样的关于liunx 单引号,双引号、反斜杆
在大家写sheel 脚本的时候,要告诉操作系统,这是一个sheel 脚本
其实就是告诉操作系统, 这是一个sheel 脚本前面加/bin/sh -c 就可以了
试了下,真可以了谢谢大家了
Process ps = Runtime.getRuntime().exec(cmds); 用数组形式即可,不用加任何转义字符。
你可以看下String[] cmds 生成的class 和直接写有什么区别最后到liunx 中的其实就是
mv /home/aaa/a01 1.txt /home/aaa/a01.txt
你看,中间有个空格,所以会找不到文件