为了避免目录列举消耗时间过长,请指定一个目录来模拟,命令行参数:代表路径的字符串.
创新互联是一家专业从事网站制作、做网站的网络公司。作为专业网站设计公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、全网营销推广及网站设计开发服务!
如果认可代码,请加分50,谢谢
----
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.io.*;
final public class FileTree extends JFrame {
public FileTree(File dir) throws HeadlessException {
super("File Tree");
JTree tree;
add(new JScrollPane(tree =new JTree(buildTreeModel(dir))));
tree.setCellRenderer(new FileTreeRenderer());
setSize(400,600);
setVisible(true);
}
private TreeModel buildTreeModel(File dir){
DefaultMutableTreeNode root = new DefaultMutableTreeNode(dir);
walkthrough(dir,root);
return new DefaultTreeModel(root);
}
private static void walkthrough(File f,DefaultMutableTreeNode node){
for (File fle : f.listFiles()) {
DefaultMutableTreeNode n = new DefaultMutableTreeNode(fle);
node.add(n);
if (fle.isDirectory()){
walkthrough(fle, n);
}
}
}
private class FileTreeRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
JLabel cmp = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode)value;
Object obj = n.getUserObject();
if (obj instanceof File) {
File f = (File)obj;
cmp.setText(f.getName());
cmp.setForeground(f.isDirectory()?Color.BLUE:Color.BLACK);
}
}
return cmp;
}
}
public static void main(String[] args) {
new FileTree(new File(args[0]));
}
}
写一个函数,函数的参数是目录路径字符串
函数内使用 ls -s dir_path , 然后for 遍历循环
如果是目录则继续调用自身
如果是文件则答应文件名
从执行优化的角度来讲,可以把判断目录还是文件的代码放在循环外层.
好久没写shell了 ,我这也没环境测试 , 只能给个思路,函数的具体写法自己找一下资料吧.
另外,find命令可以直接完成你要做的事.
#!/bin/bash
(( $# 1 )) echo "param is zero!" exit 1
[ ! -d $1 ] echo "$1 not path" exit 1
dir=$1
dir_p="$dir Directory :"
cd $dir
dir=`pwd`
for i in `ls $dir`
do
if [ -d $i ]; then
/tmp/sh/dir_file $i #我的脚本文件在/tmp/sh中,需要改一下这里
else
dir_p="$dir_p File $i"
fi
done
cd ..
echo $dir_p
实验结果:
[root@localhost sh]# ./dir_file /tmp/python/
python_2 Directory : File 1.log File 2.log
python_3 Directory : File 3.log
/tmp/python/ Directory : File p File t.py File y.py
这样应该可以吧,试试看
你可以参考如下实例代码:function getFile(file_name)
local f = assert(io.open(file_name, 'r'))
local string = f:read("*all")
f:close()
return string
end function writeFile(file_name,string)
local f = assert(io.open(file_name, 'w'))
f:write(string)
f:close()
end --从命令行获取参数, 如果有参数则遍历指定目录,没有参数遍历当前目录 if arg[1] ~= nil then
cmd = "ls "..arg[1]
else
cmd = "ls" end print("cmd", cmd)
--io.popen 返回的是一个FILE,跟c里面的popen一样 local s = io.popen(cmd)
local fileLists = s:read("*all")
print(fileLists)
while true do --从文件列表里一行一行的获取文件名 _,end_pos, line = string.find(fileLists, "([^\n\r]+.txt)", start_pos)
if not end_pos then break end -- print ("wld", line) local str = getFile(line)
--把每一行的末尾 1, 替换为 0, local new =string.gsub(str, "1,\n", "0,\n");
--替换后的字符串写入到文件。以前的内容会清空 writeFile(line, new)
start_pos = end_pos + 1 end