java 操作 liunx命令 ‘ 进行转换

2到20个英文 2010-02-02 07:23:35
Runtime.getRuntime().exec("mv -f /home/aaa/'oldName bb.txt' /home/aaa/newName.txt");


现在 aaa 目录下,有"oldName bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以


在java 中调用时,要怎么将这个' 进行转换了?

...全文
269 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
2到20个英文 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 kaoh1631 的回复:]
如果你一定要用 命令解决的话

使用exec(String[]) 的方式

因为 exec(String)的话,java会将String中的空格 当做附加的参数来进行拆分

参考如下代码:

Java codepublicclass Test {publicstaticvoid 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[]) 的方式
[/Quote]

不知道你有没有看过源码

传数组只是他自己内部进行封装下,和传全部str 没什么本质区别


问题解决了


昨天下午没上班
又不能上网,
今天早上来想了下,在学校操作系统书中,最基本的操作
我们在window 下操作时,前面可以带cmd -c ,有些时候可以省了,也可以
其实在liunx 下也是一样的

关于liunx 单引号,双引号、反斜杆
在大家写sheel 脚本的时候,要告诉操作系统,这是一个sheel 脚本
其实就是告诉操作系统, 这是一个sheel 脚本前面加/bin/sh -c 就可以了
试了下,真可以了

谢谢大家了

2到20个英文 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 beiouwolf 的回复:]
路径中的空格?
mv -f /home/aaa/'oldName\ bb.txt' /home/aaa/newName.txt
[/Quote]

在liunx 中用\是可以替换空格
但空格又包含半角,全角,还有要替换所有空格这样很麻烦,所以不可取用
谢谢你的回答
2到20个英文 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kaoh1631 的回复:]
引用 13 楼 hedangqing 的回复:
引用 10 楼 kaoh1631 的回复:
引用楼主 hedangqing 的回复:
Runtime.getRuntime().exec("mv -f /home/aaa/'oldName bb.txt' /home/aaa/newName.txt");


现在 aaa 目录下,有"oldName bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以


在java 中调用时,要怎么将这个' 进行转换了?


首先我觉得 你的思考方向有偏差

你应该充分利用java的跨平台型 解决这问题 而不是 依赖操作系统的命令。

凡是java内部可以完成的东西,尽量使用java内存的方法去完成。

Java就直接可以完成文件的 重命名,给你一个Demo

Java codeimport java.io.File;/**
*@author troy(J2EE)
*@version 1.0 1995年的3月23日*/publicclass Test {publicstaticvoid 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("重命名成功");

}

}

}


谢谢你的回答
如果此时操作到文件迁移你怎么办了?

难道还用java流去读写?这时可以利用liunx 命令很快的完成,

存在空格是逃避不了的



对于文件操作 java.io.file 提供的大量的实用(改名 、删除、写文件等)方法,文件迁移自然不在话下。

使用Java去执行 linux 命令 ,也就让java丧失了可移植性,

因为代码依赖于linux 的shell命令,这样的代码到windows上就不能使用了。

使用流 先进行读取 有几个好处:

1)可以捕获一些异常(FileNotFound 、IOException……)

2)可移植

[/Quote]
呵呵,试想谁会把环境放在windows 下面了
还有一个,如果真有人把环境放windows下了,那么也是可以做配置项目的

用命令来重定向,这样效率肯定高于你直接去读流完成

Process proc = Runtime.getRuntime().exec

使用这个方法,是可以try到异常 的
proc.getErrorStream()流
这样就可以看到错误信息了

谢谢你了
2到20个英文 2010-02-04
  • 打赏
  • 举报
回复
以后谁做到这方面不知道的,可以发信息给我,呵呵
2到20个英文 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 icy_csdn 的回复:]
Java codeString[] cmds=new String[]{"mv","/home/aaa/a01 1.txt","/home/aaa/a01.txt"};
Process ps= Runtime.getRuntime().exec(cmds);

用数组形式即可,不用加任何转义字符。
[/Quote]

你可以看下String[] cmds 生成的class 和直接写有什么区别

最后到liunx 中的其实就是
mv /home/aaa/a01 1.txt /home/aaa/a01.txt
你看,中间有个空格,所以会找不到文件

icy_csdn 2010-02-04
  • 打赏
  • 举报
回复
String[] cmds = new String[]{"mv","/home/aaa/a01 1.txt","/home/aaa/a01.txt"};
Process ps = Runtime.getRuntime().exec(cmds);


用数组形式即可,不用加任何转义字符。
zoutuo 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hedangqing 的回复:]
引用 17 楼 kaoh1631 的回复:
如果你一定要用 命令解决的话

使用exec(String[]) 的方式

因为 exec(String)的话,java会将String中的空格 当做附加的参数来进行拆分

参考如下代码:

Java codepublicclass Test {publicstaticvoid 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[]) 的方式


不知道你有没有看过源码

传数组只是他自己内部进行封装下,和传全部str 没什么本质区别


问题解决了


昨天下午没上班
又不能上网,
今天早上来想了下,在学校操作系统书中,最基本的操作
我们在window 下操作时,前面可以带cmd -c ,有些时候可以省了,也可以
其实在liunx 下也是一样的

关于liunx 单引号,双引号、反斜杆
在大家写sheel 脚本的时候,要告诉操作系统,这是一个sheel 脚本
其实就是告诉操作系统, 这是一个sheel 脚本前面加/bin/sh -c就可以了
试了下,真可以了

谢谢大家了


[/Quote]

直接sh也可以吧?
zings 2010-02-04
  • 打赏
  • 举报
回复
Java linux 编程 我也有这部分。。。
mark。。。
doniks 2010-02-03
  • 打赏
  • 举报
回复
给lz一个例子
根据不用的操作系统,而选择/ or \
String lsSlash = asFullPath.lastIndexOf("\\") != -1 ? "\\" : "/";
Thinking_In_IT 2010-02-03
  • 打赏
  • 举报
回复
上面的代码在windows

其实在linux 上也一样的。

当前目录 /home/tomcat/tmp

1)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 Test

output:
---------------------------------------------------------------------------
[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
Thinking_In_IT 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 hedangqing 的回复:]
Runtime.getRuntime().exec("mv -f /home/aaa/'oldName  bb.txt'  /home/aaa/newName.txt");


现在 aaa 目录下,有"oldName  bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以


在java 中调用时,要怎么将这个' 进行转换了?


[/Quote]


首先我觉得 你的思考方向有偏差

你应该充分利用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("重命名成功");

}

}

}

蛋黄车 2010-02-03
  • 打赏
  • 举报
回复
\'oldName bb.txt\'
Thinking_In_IT 2010-02-03
  • 打赏
  • 举报
回复
如果你一定要用 命令解决的话

使用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[]) 的方式
beiouwolf 2010-02-03
  • 打赏
  • 举报
回复
路径中的空格?
mv -f /home/aaa/'oldName\ bb.txt' /home/aaa/newName.txt
Thinking_In_IT 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hedangqing 的回复:]
引用 10 楼 kaoh1631 的回复:
引用楼主 hedangqing 的回复:
Runtime.getRuntime().exec("mv -f /home/aaa/'oldName  bb.txt'  /home/aaa/newName.txt");


现在 aaa 目录下,有"oldName  bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以


在java 中调用时,要怎么将这个' 进行转换了?


首先我觉得 你的思考方向有偏差

你应该充分利用java的跨平台型 解决这问题 而不是 依赖操作系统的命令。

凡是java内部可以完成的东西,尽量使用java内存的方法去完成。

Java就直接可以完成文件的 重命名,给你一个Demo

Java codeimport java.io.File;/**
*@author troy(J2EE)
*@version 1.0  1995年的3月23日*/publicclass Test {publicstaticvoid 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("重命名成功");

      }

    }

}


谢谢你的回答
如果此时操作到文件迁移你怎么办了?

难道还用java流去读写?这时可以利用liunx 命令很快的完成,

存在空格是逃避不了的

[/Quote]

对于文件操作 java.io.file 提供的大量的实用(改名 、删除、写文件等)方法,文件迁移自然不在话下。

使用Java去执行 linux 命令 ,也就让java丧失了可移植性,

因为代码依赖于linux 的shell命令,这样的代码到windows上就不能使用了。

使用流 先进行读取 有几个好处:

1)可以捕获一些异常(FileNotFound 、IOException……)

2)可移植





2到20个英文 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 doniks 的回复:]
给lz一个例子
根据不用的操作系统,而选择/ or \
String lsSlash = asFullPath.lastIndexOf("\\") != -1 ? "\\" : "/";
[/Quote]

谢谢
早试过了,这些没用

我只能上这个论谈,在liunx 中 单引号 双引号 反斜杠都有不同的含义,
2到20个英文 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kaoh1631 的回复:]
引用楼主 hedangqing 的回复:
Runtime.getRuntime().exec("mv -f /home/aaa/'oldName bb.txt' /home/aaa/newName.txt");


现在 aaa 目录下,有"oldName bb.txt", 文件名中间包含空格在操作时,文件名前后要加上 ''
在liunx 中操作可以


在java 中调用时,要怎么将这个' 进行转换了?





首先我觉得 你的思考方向有偏差

你应该充分利用java的跨平台型 解决这问题 而不是 依赖操作系统的命令。

凡是java内部可以完成的东西,尽量使用java内存的方法去完成。

Java就直接可以完成文件的 重命名,给你一个Demo

Java codeimport java.io.File;/**
*@author troy(J2EE)
*@version 1.0 1995年的3月23日*/publicclass Test {publicstaticvoid 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("重命名成功");

}

}

}
[/Quote]

谢谢你的回答
如果此时操作到文件迁移你怎么办了?

难道还用java流去读写?这时可以利用liunx 命令很快的完成,

存在空格是逃避不了的
2到20个英文 2010-02-02
  • 打赏
  • 举报
回复
来人呀
2到20个英文 2010-02-02
  • 打赏
  • 举报
回复
呵呵

要是这样在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\’

他自己加上了个\ ,这样也就找不到目录了


蛋黄车 2010-02-02
  • 打赏
  • 举报
回复
[oldName bb.txt]

最后一招。。。别的不会了
加载更多回复(5)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧