⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filemanager.java

📁 Unix下基于Web的管理工具
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		}	return pos;	}	public boolean action(Event e, Object o)	{	if (e.target == pathname) {		// A new path was entered.. cd to it		String p = pathname.getText().trim();		if (p.equals("")) return true;		find_directory(p, true);		return true;		}	return false;	}        // singleClick        // Called on a single click on a list item        public void singleClick(MultiColumn list, int num)	{	}        // doubleClick        // Called upon double-clicking on a list item        public void doubleClick(MultiColumn list, int num)	{	if (num == 0) {		// Go to parent directory		if (showing_files.directory != null) {			((FileNode)nodemap.get(showing_files)).open = false;			show_files(showing_files.directory);			dirs.select((FileNode)nodemap.get(showing_files));			dirs.redraw();			}		return;		}	RemoteFile d = (showing_files.list())[num-1];	if (d.type == 0) {		// Open this directory		FileNode pn = (FileNode)nodemap.get(showing_files);		pn.fill();		pn.open = true;		FileNode fn = (FileNode)nodemap.get(d);		fn.fill();		fn.open = true;		show_files(d);		dirs.select(fn);		dirs.redraw();		}	else if (d.type <= 4) {		// Direct the browser to this file		show_file(d);		}	}	void show_file(RemoteFile f)	{	try {		URL u = new URL(getDocumentBase(), "show.cgi"+urlize(f.path)+				"?rand="+System.currentTimeMillis());		getAppletContext().showDocument(u, "show");		}	catch(Exception e) { }	}	String urlize(String s)	{	StringBuffer rv = new StringBuffer();	for(int i=0; i<s.length(); i++) {		char c = s.charAt(i);		if (c == '%' || c == '+' || c == '&' || c == '?' || c == ' ')			rv.append("%"+Integer.toString(c, 16));		else			rv.append(c);		}	return rv.toString();	}	public void upload_notify(String path_str, String info)	{	int sl = path_str.lastIndexOf('/');	String par_str = path_str.substring(0, sl),	       file_str = path_str.substring(sl+1);	RemoteFile par = find_directory(par_str, false);	RemoteFile upfile = par.find(file_str);	if (upfile == null) {		upfile = new RemoteFile(this, info, par);		par.add(upfile);		}	show_files(showing_files);	}	public String text(String k, String p[])	{	String rv = (String)lang.get(k);	for(int i=0; i<p.length; i++) {		int idx = rv.indexOf("$"+(i+1));		if (idx != -1)			rv = rv.substring(0, idx)+p[i]+rv.substring(idx+2);		}	return rv;	}	public String text(String k)	{	String p[] = { };	return text(k, p);	}	public String text(String k, String p1)	{	String p[] = { p1 };	return text(k, p);	}	public String text(String k, String p1, String p2)	{	String p[] = { p1, p2 };	return text(k, p);	}}// A node in the directory treeclass FileNode extends HierarchyNode{	FileManager parent;	RemoteFile file;	boolean known;	FileNode(RemoteFile file)	{	this.file = file;	parent = file.parent;	im = parent.get_image("dir.gif");	ch = new Vector();	text = file.name;	parent.nodemap.put(file, this);	}	// Create the nodes for subdirectories	void fill()	{	if (!known) {		RemoteFile l[] = file.list();		ch.removeAllElements();		for(int i=0; i<l.length; i++)			if (l[i].type == 0)				ch.addElement(new FileNode(l[i]));		parent.dirs.redraw();		known = true;		}	}	void add(FileNode n)	{	for(int i=0; i<=ch.size(); i++) {		FileNode ni = i==ch.size() ? null : (FileNode)ch.elementAt(i);		if (ni == null || ni.text.compareTo(n.text) > 0) {			ch.insertElementAt(n, i);			break;			}		}	}}class RemoteFile{	static final int DIR = 0;	static final int TEXT = 1;	static final int IMAGE = 2;	static final int BINARY = 3;	static final int UNKNOWN = 4;	static final int SYMLINK = 5;	static final int DEVICE = 6;	static final int PIPE = 7;	static final String[] tmap = { "dir.gif", "text.gif", "image.gif",				       "binary.gif", "unknown.gif",				       "symlink.gif", "device.gif",				       "pipe.gif" };	FileManager parent;	String path, name;	int type;	String user, group;	int size;	int perms;	long modified;	String linkto;	RemoteFile list[];	RemoteFile directory;	// Parse a line of text to a file object	RemoteFile(FileManager parent, String line, RemoteFile d)	{	this.parent = parent;	StringTokenizer tok = new StringTokenizer(line, "\t");	path = tok.nextToken();	type = Integer.parseInt(tok.nextToken());	user = tok.nextToken();	group = tok.nextToken();	size = Integer.parseInt(tok.nextToken());	perms = Integer.parseInt(tok.nextToken());	modified = Long.parseLong(tok.nextToken())*1000;	if (type == 5) linkto = tok.nextToken();	directory = d;	if (path.equals("/")) name = "/";	else name = path.substring(path.lastIndexOf('/')+1);	}	// Create a new, empty file object	RemoteFile() { }	// Returns a list of files in this directory	RemoteFile[] list()	{	if (list == null) {		String l[] = parent.get_text("list.cgi?dir="+					     parent.urlize(path));		if (l[0].length() > 0)			list = new RemoteFile[0];		else {			list = new RemoteFile[l.length-3];			for(int i=3; i<l.length; i++)				list[i-3] = new RemoteFile(parent, l[i], this);			}		}	return list;	}	RemoteFile find(String n)	{	RemoteFile l[] = list();	for(int i=0; i<l.length; i++)		if (l[i].name.equals(n))			return l[i];	return null;	}	void add(RemoteFile f)	{	RemoteFile nlist[] = new RemoteFile[list.length+1];	int offset = 0;	for(int i=0; i<list.length; i++) {		if (list[i].name.compareTo(f.name) > 0 && offset == 0) {			nlist[i] = f;			offset++;			}		nlist[i+offset] = list[i];		}	if (offset == 0) nlist[list.length] = f;	list = nlist;	}	void delete(RemoteFile f)	{	RemoteFile nlist[] = new RemoteFile[list.length-1];	for(int i=0,j=0; i<list.length; i++)		if (list[i] != f)			nlist[j++] = list[i];	list = nlist;	}}class EditorWindow extends FixedFrame implements CbButtonCallback{	TextField name;	TextArea edit;	CbButton save_b, cancel_b;	RemoteFile file;	FileManager filemgr;	// Editing an existing file	EditorWindow(RemoteFile f, FileManager p)	{	super(500, 300);	file = f; filemgr = p;	makeUI(false);	setTitle(filemgr.text("edit_title", file.path));	// Load the file	try {		URL u = new URL(filemgr.getDocumentBase(),				"show.cgi"+filemgr.urlize(file.path)+				"?rand="+System.currentTimeMillis());		URLConnection uc = u.openConnection();		byte buf[] = new byte[uc.getContentLength()];		InputStream is = uc.getInputStream();		int got = 0;		while(got < buf.length)			got += is.read(buf, got, buf.length-got);		edit.setText(new String(buf, 0));		is.close();		file.size = buf.length;		}	catch(Exception e) { e.printStackTrace(); }	}	// Creating a new file	EditorWindow(String f, FileManager p)	{	super(500, 300);	filemgr = p;	makeUI(true);	setTitle(filemgr.text("edit_title2"));	name.setText(f.equals("/") ? f : f+"/");	name.select(name.getText().length(), name.getText().length());	}	void makeUI(boolean add_name)	{	setLayout(new BorderLayout());	if (add_name) {		Panel np = new Panel();		np.setLayout(new BorderLayout());		np.add("West", new Label(filemgr.text("edit_filename")));		np.add("Center", name = new TextField());		add("North", np);		}	add("Center", edit = new TextArea(20, 80));	edit.setFont(new Font("courier", Font.PLAIN, 10));	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.RIGHT));	bot.add(save_b = new CbButton(filemgr.get_image("save.gif"),				      filemgr.text("save"),				      CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	pack();	show();	}	public void click(CbButton b)	{	if (b == save_b) {		RemoteFile par = null, already = null;		String save_path;		if (file == null) {			// Locate the filemgr directory			save_path = filemgr.trim_path(name.getText());			int sl = save_path.lastIndexOf('/');			par = filemgr.find_directory(					save_path.substring(0, sl), false);			if (par == null) return;			already = par.find(save_path.substring(sl+1));			if (already != null &&			    (already.type == 0 || already.type == 5)) {				new ErrorWindow(					filemgr.text("edit_eover", save_path));				return;				}			}		else save_path = file.path;		// Save the file back again		String s = edit.getText(), line;		try {			URL u = new URL(filemgr.getDocumentBase(),					"save.cgi"+filemgr.urlize(save_path)+					"?rand="+System.currentTimeMillis());			URLConnection uc = u.openConnection();			uc.setDoOutput(true);			OutputStream os = uc.getOutputStream();			byte buf[] = new byte[s.length()];			s.getBytes(0, buf.length, buf, 0);			os.write(buf);			LineInputStream is = new LineInputStream(							uc.getInputStream());			String err = is.gets();			if (err.length() > 0) {				new ErrorWindow(					filemgr.text("edit_esave", err));				is.close();				return;				}			line = is.gets();			is.close();			}		catch(Exception e) { e.printStackTrace(); return; }		if (file == null) {			// Create and insert or replace the file object			file = new RemoteFile(filemgr, line, par);			if (already != null) {				// A file with this name exists				already.type = file.type;				already.user = file.user;				already.group = file.group;				already.size = file.size;				already.perms = file.perms;				already.modified = file.modified;				}			else {				// Add to the list				par.add(file);				}			}		else {			file.size = s.length();			file.modified = System.currentTimeMillis();			}		filemgr.show_files(filemgr.showing_files);		dispose();		}	else {		// Just close		dispose();		}	}}class PropertiesWindow extends FixedFrame implements CbButtonCallback{	RemoteFile file;	FileManager filemgr;	CbButton save_b, cancel_b;	TextField linkto;	TextField user, group;	Checkbox setuid, setgid;	PermissionsPanel user_p, group_p, other_p;	Checkbox sticky;	Choice rec_mode;	PropertiesWindow(RemoteFile f, FileManager p)	{	file = f;	filemgr = p;	// Create UI	setTitle(f.path);	setLayout(new BorderLayout());	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.RIGHT));	bot.add(save_b = new CbButton(filemgr.get_image("save.gif"),				      filemgr.text("save"),				      CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	Panel mid = new Panel();	mid.setLayout(new BorderLayout());	add("Center", mid);	// Create file details section	Panel det = new LinedPanel(filemgr.text("info_file")),	      dl = new Panel(), dr = new Panel();	setup_leftright(det, dl, dr);	add_item(filemgr.text("info_path"),		new Label(file.path), dl, dr);	add_item(filemgr.text("info_type"),		new Label(filemgr.text("file_type"+file.type)), dl, dr);	add_item(filemgr.text("info_size"),		new Label(String.valueOf(file.size)),dl,dr);	add_item(filemgr.text("info_mod"),		new Label(String.valueOf(new Date(file.modified))), dl, dr);	if (file.type == 5)		add_item(filemgr.text("info_link"),			 linkto = new TextField(file.linkto, 30), dl, dr);	mid = add_panel(mid, det);	// Create permissions section	Panel per = new LinedPanel(filemgr.text("info_perms")),	      pl = new Panel(), pr = new Panel();	setup_leftright(per, pl, pr);	add_item(filemgr.text("info_user"),		 user_p = new PermissionsPanel(file, 64, filemgr), pl, pr);	add_item(filemgr.text("info_group"),		 group_p = new PermissionsPanel(file, 8, filemgr), pl, pr);	add_item(filemgr.text("info_other"),		 other_p = new PermissionsPanel(file, 1, filemgr), pl,pr);	if (file.type == 0) {		add_item(filemgr.text("info_sticky"), sticky = new Checkbox(					filemgr.text("info_sticky2")), pl,pr);		sticky.setState((file.perms&01000) != 0);		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -