Runtime.getRuntime().exec("mv -f /home/aaa/'oldName  bb.txt'  /home/aaa/newName.txt");
现在 aaa 目录下,有"oldName  bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 '' 
在liunx 中操作可以
在java 中调用时,要怎么将这个' 进行转换了?

解决方案 »

  1.   

    用java中自带的字符串StringTokenizer能分离出一个空格如StringTokenizer ch = StringTokenizer(str); 
      

  2.   


    谢谢你
    不是这个意思是在ftp 上有一个文件我在用java 对这个文件进行重命名
    但文件包含空格,在liunx 中文件名前后加上'' 即可
    用java 命令调,也是要求前后加上‘’ ,
    但不能直接输入,要转换才可起到效果,现不知道用什么转换
    否则找不到
      

  3.   

    你是要让 oldName  bb.txt 当作是一个整体,让java识别它的路径吗?
      

  4.   

    Runtime.getRuntime().exec('mv -f /home/aaa/"oldName  bb.txt"/home/aaa/newName.txt'); 这种写法试过没?
      

  5.   

         */
        public Process exec(String command) throws IOException {
    return exec(command, null, null);
        }上面那样写是不可以的
      

  6.   

    [oldName bb.txt]最后一招别的不会了
      

  7.   

    呵呵要是这样在java 中写
    那么到liunx 中去的时候,也就成了 /home/aaa/[oldName bb.txt]  这样liunx不会找到这个目录/home/aaa/‘oldName bb.txt’ 要是能这样就行了
    但在java 中加个什么转换下 ' 了,如果不加\\
    /home/aaa/‘oldName bb.txt’到liunx 中后就成了  /home/aaa/\‘oldName bb.txt\’他自己加上了个\ ,这样也就找不到目录了
      

  8.   

    首先我觉得 你的思考方向有偏差你应该充分利用java的跨平台型 解决这问题 而不是 依赖操作系统的命令。凡是java内部可以完成的东西,尽量使用java内存的方法去完成。Java就直接可以完成文件的 重命名,给你一个Demo
    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("重命名成功");       }    }}
      

  9.   

     上面的代码在windows 其实在linux 上也一样的。当前目录 /home/tomcat/tmp1)vi '1 这是一个测试文件'2)编写Test.java
    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
      

  10.   

    给lz一个例子
    根据不用的操作系统,而选择/ or \
    String lsSlash = asFullPath.lastIndexOf("\\") != -1 ? "\\" : "/";
      

  11.   


    谢谢你的回答
    如果此时操作到文件迁移你怎么办了?难道还用java流去读写?这时可以利用liunx 命令很快的完成,存在空格是逃避不了的
      

  12.   


    谢谢
    早试过了,这些没用我只能上这个论谈,在liunx 中 单引号  双引号  反斜杠都有不同的含义,
      

  13.   


    对于文件操作 java.io.file 提供的大量的实用(改名 、删除、写文件等)方法,文件迁移自然不在话下。使用Java去执行 linux 命令 ,也就让java丧失了可移植性,因为代码依赖于linux 的shell命令,这样的代码到windows上就不能使用了。使用流 先进行读取 有几个好处:1)可以捕获一些异常(FileNotFound 、IOException……)2)可移植
      

  14.   

    路径中的空格?
    mv -f /home/aaa/'oldName\  bb.txt'  /home/aaa/newName.txt
      

  15.   

    如果你一定要用 命令解决的话 使用exec(String[]) 的方式 因为 exec(String)的话,java会将String中的空格 当做附加的参数来进行拆分参考如下代码:
    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[]) 的方式
      

  16.   

    呵呵,试想谁会把环境放在windows 下面了
    还有一个,如果真有人把环境放windows下了,那么也是可以做配置项目的用命令来重定向,这样效率肯定高于你直接去读流完成Process proc = Runtime.getRuntime().exec使用这个方法,是可以try到异常 的
    proc.getErrorStream()流
    这样就可以看到错误信息了谢谢你了
      

  17.   


    在liunx 中用\是可以替换空格
    但空格又包含半角,全角,还有要替换所有空格这样很麻烦,所以不可取用
    谢谢你的回答
      

  18.   


    不知道你有没有看过源码传数组只是他自己内部进行封装下,和传全部str 没什么本质区别
    问题解决了
    昨天下午没上班
    又不能上网,
    今天早上来想了下,在学校操作系统书中,最基本的操作
    我们在window 下操作时,前面可以带cmd -c ,有些时候可以省了,也可以
    其实在liunx 下也是一样的关于liunx 单引号,双引号、反斜杆
    在大家写sheel 脚本的时候,要告诉操作系统,这是一个sheel 脚本
    其实就是告诉操作系统, 这是一个sheel 脚本前面加/bin/sh -c 就可以了
    试了下,真可以了谢谢大家了
      

  19.   

    Java  linux  编程 我也有这部分
      

  20.   

    String[] cmds = new String[]{"mv","/home/aaa/a01 1.txt","/home/aaa/a01.txt"};
    Process ps = Runtime.getRuntime().exec(cmds); 用数组形式即可,不用加任何转义字符。
      

  21.   


    你可以看下String[] cmds 生成的class 和直接写有什么区别最后到liunx 中的其实就是
    mv /home/aaa/a01 1.txt /home/aaa/a01.txt
    你看,中间有个空格,所以会找不到文件