public static void unTar(File inFile, File untarDir) throws IOException { if (!untarDir.mkdirs()) { if (!untarDir.isDirectory()) {
throw new IOException(\ } }
StringBuffer untarCommand = new StringBuffer(); boolean gzipped = inFile.toString().endsWith(\ if (gzipped) {
untarCommand.append(\
untarCommand.append(FileUtil.makeShellPath(inFile)); untarCommand.append(\ }
untarCommand.append(\
untarCommand.append(FileUtil.makeShellPath(untarDir)); untarCommand.append(\ untarCommand.append(\
if (gzipped) {
untarCommand.append(\ } else {
untarCommand.append(FileUtil.makeShellPath(inFile)); }
String[] shellCmd = { \
ShellCommandExecutor shexec = new ShellCommandExecutor(shellCmd); shexec.execute();
int exitcode = shexec.getExitCode(); if (exitcode != 0) {
throw new IOException(\ \ } } /**
* Create a soft link between a src and destination * only on a local disk. HDFS does not support this * @param target the target for symlink * @param linkname the symlink
* @return value returned by the command */
public static int symLink(String target, String linkname) throws IOException{ String cmd = \ Process p = Runtime.getRuntime().exec(cmd, null); int returnVal = -1; try{
returnVal = p.waitFor(); } catch(InterruptedException e){ //do nothing as of yet }
if (returnVal != 0) {
LOG.warn(\ \ }
return returnVal; }
private static String copyStderr(Process p) throws IOException { InputStream err = p.getErrorStream(); StringBuilder result = new StringBuilder(); byte[] buff = new byte[4096]; int len = err.read(buff); while (len > 0) {
result.append(new String(buff, 0 , len)); len = err.read(buff); }
return result.toString(); } /**
* Change the permissions on a filename. * @param filename the name of the file to change * @param perm the permission string * @return the exit code from the command * @throws IOException * @throws InterruptedException */
public static int chmod(String filename, String perm
) throws IOException, InterruptedException { return chmod(filename, perm, false); } /**
* Change the permissions on a file / directory, recursively, if * needed.
* @param filename name of the file whose permissions are to change * @param perm permission string
* @param recursive true, if permissions should be changed recursively * @return the exit code from the command. * @throws IOException * @throws InterruptedException */
public static int chmod(String filename, String perm, boolean recursive) throws IOException { StringBuffer cmdBuf = new StringBuffer(); cmdBuf.append(\ if (recursive) {
cmdBuf.append(\ }
cmdBuf.append(perm).append(\ cmdBuf.append(filename);
String[] shellCmd = {\
ShellCommandExecutor shExec = new ShellCommandExecutor(shellCmd); try {
shExec.execute();
}catch(IOException e) { if(LOG.isDebugEnabled()) {
LOG.debug(\ +\ } }
return shExec.getExitCode(); } /**
* Set permissions to the required value. Uses the java primitives instead * of forking if group == other. * @param f the file to change
* @param permission the new permissions * @throws IOException */
public static void setPermission(File f, FsPermission permission ) throws IOException { FsAction user = permission.getUserAction(); FsAction group = permission.getGroupAction(); FsAction other = permission.getOtherAction();
// use the native/fork if the group/other permissions are different // or if the native is available
if (group != other || NativeIO.isAvailable()) { execSetPermission(f, permission); return; }
boolean rv = true;
// read perms
rv = f.setReadable(group.implies(FsAction.READ), false); checkReturnValue(rv, f, permission);
if (group.implies(FsAction.READ) != user.implies(FsAction.READ)) {
f.setReadable(user.implies(FsAction.READ), true); checkReturnValue(rv, f, permission); }
// write perms
rv = f.setWritable(group.implies(FsAction.WRITE), false); checkReturnValue(rv, f, permission);
if (group.implies(FsAction.WRITE) != user.implies(FsAction.WRITE)) { f.setWritable(user.implies(FsAction.WRITE), true); checkReturnValue(rv, f, permission); }
// exec perms
rv = f.setExecutable(group.implies(FsAction.EXECUTE), false); checkReturnValue(rv, f, permission);
if (group.implies(FsAction.EXECUTE) != user.implies(FsAction.EXECUTE)) { f.setExecutable(user.implies(FsAction.EXECUTE), true); checkReturnValue(rv, f, permission); } }
private static void checkReturnValue(boolean rv, File p,
FsPermission permission ) throws IOException {
System.out.println(\
// if (!rv) {
// throw new IOException(\ // \
// String.format(\// } }
private static void execSetPermission(File f,
FsPermission permission ) throws IOException {
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库hadoop单机部署、集群部署及win7本地Eclipse远程配置管理(7)在线全文阅读。
相关推荐: