📄 browser_jsp.java
字号:
out.println("<form action=\"" + browser_name + "\" method=\"Post\">\n" +
"<textarea name=\"text\" wrap=\"off\" cols=\"" +
EDITFIELD_COLS+"\" rows=\"" + EDITFIELD_ROWS + "\"" + disable + ">");
String c;
// Write out the file and check if it is a win or unix file
int i;
boolean dos=false;
boolean cr=false;
while ((i=reader.read())>=0) {
out.print(conv2Html(i));
if (i=='\r') cr=true;
else if (cr&&(i=='\n')) dos=true;
else cr = false;
}
reader.close();
out.write("</textarea>\r\n");
out.write("\t<input type=\"hidden\" name=\"nfile\" value=\"");
out.print( request.getParameter("editfile"));
out.write("\">\r\n");
out.write("\t<br>\r\n");
out.write("\t<table>\r\n");
out.write("\t\t<tr><td><input type=\"radio\" name=\"lineformat\" value=\"dos\" ");
out.print( dos?"checked":"");
out.write(">Ms-Dos/Windows</td>\r\n");
out.write("\t\t<td><input type=\"radio\" name=\"lineformat\" value=\"unix\" ");
out.print( dos?"":"checked");
out.write(">Unix</td></tr>\r\n");
out.write("\t\t<tr><td title=\"Enter the new filename\"><input type=\"text\" name=\"new_name\" value=\"");
out.print(ef.getName());
out.write("\"></td>\r\n");
out.write("\t\t<td><input type=\"Submit\" name=\"Submit\" value=\"Save\"></td>\r\n");
out.write("\t\t<td><input type=\"Submit\" name=\"Submit\" value=\"Cancel\">\r\n");
out.write("\t\t<input type=\"hidden\" name=\"sort\" value=\"");
out.print(request.getParameter("sort"));
out.write("\">\r\n");
out.write("\t\t</td></tr>\r\n");
out.write("\t\t<tr><td><input type=\"checkbox\" name=\"Backup\" checked>Write backup</td></tr>\r\n");
out.write("\t</table>\r\n");
out.write("\t</form>\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
}
// Save or cancel the edited file
else if (request.getParameter("nfile")!=null){
File f = new File(request.getParameter("nfile"));
File new_f = new File(getDir(f.getParent(), request.getParameter("new_name")));
if (request.getParameter("Submit").equals("Save")){
if (new_f.exists() && new_f.canWrite() && request.getParameter("Backup")!=null){
File bak = new File(new_f.getAbsolutePath()+".bak");
bak.delete();
new_f.renameTo(bak);
}
if (new_f.exists() && !new_f.canWrite())
request.setAttribute("error", "Cannot write to "+new_f.getName()+", file is write protected.");
else{
BufferedWriter outs = new BufferedWriter(new FileWriter(new_f));
StringReader text = new StringReader (request.getParameter("text"));
int i;
boolean cr=false;
String lineend = "\n";
if (request.getParameter("lineformat").equals("dos")) lineend = "\r\n";
while ((i=text.read())>=0) {
if (i=='\r') cr = true;
else if (i=='\n') { outs.write (lineend); cr=false;}
else if (cr) {outs.write (lineend); cr=false;}
else {outs.write (i); cr=false;}
}
outs.flush();
outs.close();
}
}
request.setAttribute("dir", f.getParent());
}
//Unpack file to the current directory without overwriting
else if (request.getParameter("unpackfile") != null){
File f = new File (request.getParameter("unpackfile"));
String root = f.getParent();
request.setAttribute("dir", root);
//Check if file exists
if (!f.exists()){
request.setAttribute("error", "Cannot unpack "+f.getName()+", file does not exist");
}
//Check if directory is readonly
else if (!f.getParentFile().canWrite()){
request.setAttribute("error", "Cannot unpack "+f.getName()+", directory is write protected.");
}
//GZip
else if (f.getName().toLowerCase().endsWith(".gz")){
//New name is old Name without .gz
String newName = f.getAbsolutePath().substring(0, f.getAbsolutePath().length()-3);
try{
byte buffer[] = new byte[0xffff];
copyStreams(new GZIPInputStream(new FileInputStream(f)), new FileOutputStream(newName), buffer);
}
catch (IOException ex){
request.setAttribute("error", "Unpacking of "+f.getName()+" aborted. Error: "+ex);
}
}
//Else try Zip
else{
try{
ZipFile zf = new ZipFile(f);
Enumeration entries = zf.entries();
//First check whether a file already exist
boolean error=false;
while (entries.hasMoreElements()){
ZipEntry entry = (ZipEntry) entries.nextElement();
if (!entry.isDirectory() && new File(root+File.separator+entry.getName()).exists()){
request.setAttribute("error", "Cannot unpack "+f.getName()+", File "+entry.getName()+" already exists.");
error = true;
break;
}
}
if (!error){
//Unpack File
entries = zf.entries();
byte buffer[] = new byte[0xffff];
while (entries.hasMoreElements()){
ZipEntry entry = (ZipEntry) entries.nextElement();
File n = new File(root+File.separator+entry.getName());
if (entry.isDirectory()) n.mkdirs();
else{
n.getParentFile().mkdirs();
n.createNewFile();
copyStreams(zf.getInputStream(entry), new FileOutputStream (n), buffer);
}
}
zf.close();
request.setAttribute("message", "Unpack of "+f.getName()+" was successful.");
}
}
catch (ZipException ex){
request.setAttribute("error", "Cannot unpack "+f.getName()+", no valid zip file");
}
catch (IOException ex){
request.setAttribute("error", "Unpacking of "+f.getName()+" aborted. Error: "+ex);
}
}
}
// Delete Files
else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals(DELETE_FILES))){
Vector v = expandFileList(request.getParameterValues("selfile"), true);
boolean error = false;
//delete backwards
for (int i=v.size()-1;i>=0;i--){
File f = (File)v.get(i);
if (!f.canWrite()||!f.delete()){
request.setAttribute("error", "Cannot delete "+f.getAbsolutePath()+". Deletion aborted");
error = true;
break;
}
}
if ((!error)&&(v.size()>1)) request.setAttribute("message", "All files deleted");
else if ((!error)&&(v.size()>0)) request.setAttribute("message", "File deleted");
else if (!error) request.setAttribute("error", "No files selected");
}
// Create Directory
else if ((request.getParameter("Submit") != null)&&(request.getParameter("Submit").equals(CREATE_DIR))){
String dir = ""+request.getAttribute("dir");
String dir_name = request.getParameter("cr_dir");
String new_dir = getDir (dir, dir_name);
if (new File(new_dir).mkdirs()){
request.setAttribute("message", "Directory created");
}
else request.setAttribute("error", "Creation of directory "+new_dir+" failed");
}
// Create a new empty file
else if ((request.getParameter("Submit") != null) && (request.getParameter("Submit").equals(CREATE_FILE))){
String dir = "" + request.getAttribute("dir");
String file_name = request.getParameter("cr_dir");
String new_file = getDir (dir, file_name);
// Test, if file_name is empty
if (!"".equals(file_name.trim()) && !file_name.endsWith(File.separator)){
if (new File(new_file).createNewFile()) request.setAttribute("message", "File created");
else request.setAttribute("error", "Creation of file "+new_file+" failed");
}
else request.setAttribute("error", "Error: "+file_name+" is not a valid filename");
}
// Rename a file
else if ((request.getParameter("Submit") != null) && (request.getParameter("Submit").equals(RENAME_FILE))){
Vector v = expandFileList(request.getParameterValues("selfile"), true);
String dir = "" + request.getAttribute("dir");
String new_file_name = request.getParameter("cr_dir");
String new_file = getDir (dir, new_file_name);
// The error conditions:
// 1) Zero Files selected
if (v.size() <= 0) request.setAttribute("error", "Select exactly one file or folder. Rename failed");
// 2a) Multiple files selected and the first isn't a dir
// Here we assume that expandFileList builds v from top-bottom, starting with the dirs
else if ((v.size() > 1) && !(((File)v.get(0)).isDirectory()))
request.setAttribute("error", "Select exactly one file or folder. Rename failed");
// 2b) If there are multiple files from the same directory, rename fails
else if ((v.size() > 1) && ((File)v.get(0)).isDirectory() && !(((File)v.get(0)).getPath().equals(((File)v.get(1)).getParent()))){
request.setAttribute("error", "Select exactly one file or folder. Rename failed");
}
else {
File f = (File)v.get(0);
// Test, if file_name is empty
if ((new_file.trim() != "") && !new_file.endsWith(File.separator)){
if (!f.canWrite() || !f.renameTo(new File(new_file.trim()))){
request.setAttribute("error", "Creation of file " + new_file + " failed");
}
else request.setAttribute("message", "Renamed file "+((File)v.get(0)).getName()+" to "+new_file);
}
else request.setAttribute("error", "Error: \"" + new_file_name + "\" is not a valid filename");
}
}
// Move selected file(s)
else if ((request.getParameter("Submit") != null) && (request.getParameter("Submit").equals(MOVE_FILES))){
Vector v = expandFileList(request.getParameterValues("selfile"), true);
String dir = "" + request.getAttribute("dir");
String dir_name = request.getParameter("cr_dir");
String new_dir = getDir(dir, dir_name);
boolean error = false;
// This ensures that new_dir is a directory
if (!new_dir.endsWith(File.separator)) new_dir += File.separator;
for (int i = v.size() - 1; i >= 0; i--){
File f = (File)v.get(i);
if (!f.canWrite()||!f.renameTo(new File(new_dir + f.getAbsolutePath().substring(dir.length())))){
request.setAttribute("error", "Cannot move "+f.getAbsolutePath()+". Move aborted");
error = true;
break;
}
}
if ((!error) && (v.size() > 1)) request.setAttribute("message", "All files moved");
else if ((!error) && (v.size() > 0)) request.setAttribute("message", "File moved");
else if (!error) request.setAttribute("error", "No files selected");
}
// Copy Files
else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals(COPY_FILES))){
Vector v = expandFileList(request.getParameterValues("selfile"), true);
String dir = (String)request.getAttribute("dir");
if (!dir.endsWith(File.separator)) dir+=File.separator;
String dir_name = request.getParameter("cr_dir");
String new_dir = getDir(dir, dir_name);
boolean error = false;
if (!new_dir.endsWith(File.separator)) new_dir += File.separator;
try{
byte buffer[] = new byte[0xffff];
for (int i = 0; i < v.size(); i++){
File f_old = (File)v.get(i);
File f_new = new File(new_dir + f_old.getAbsolutePath().substring(dir.length()));
if (f_old.isDirectory()) f_new.mkdirs();
// Overwriting is forbidden
else if (!f_new.exists()){
copyStreams(new FileInputStream (f_old), new FileOutputStream (f_new), buffer);
}
else{
// File exists
request.setAttribute("error", "Cannot copy "+f_old.getAbsolutePath()+", file already exists. Copying aborted");
error = true;
break;
}
}
}
catch (IOException e){
request.setAttribute("error", "Error "+e+". Copying aborted");
error = true;
}
if ((!error)&&(v.size()>1)) request.setAttribute("message", "All files copied");
else if ((!error)&&(v.size()>0)) request.setAttribute("message", "File copied");
else if (!error) request.setAttribute("error", "No files selected");
}
// Directory viewer
if (dir_view && request.getAttribute("dir")!=null){
File f = new File(""+request.getAttribute("dir"));
//Check, whether the dir exists
if (!f.exists()){
request.setAttribute("error", "Directory "+f.getAbsolutePath()+" does not exist.");
//if attribute olddir exists, it will change to olddir
if (request.getAttribute("olddir")!=null){
f = new File(""+request.getAttribute("olddir"));
}
//try to go to the parent dir
else {
if (f.getParent() != null) f = new File(f.getParent());
}
//If this dir also do also not exist, go back to browser.jsp root path
if (!f.exists()){
String path = null;
if (application.getRealPath(request.getRequestURI()) != null)
path = new File(application.getRealPath(request.getRequestURI())).getParent();
if (path == null) // handle the case were we are not in a directory (ex: war file)
path = new File(".").getAbsolutePath();
f = new File(path);
}
request.setAttribute("dir", f.getAbsolutePath());
}
out.write("\r\n");
out.write("<script type=\"text/javascript\">\r\n");
out.write("<!--\r\n");
out.write("\t");
// This section contains the Javascript used for interface elements
out.write("\r\n");
out.write("\tvar check = false;\r\n");
out.write("\t");
// Disables the checkbox feature
out.write("\r\n");
out.write("\tfunction dis(){check = true;}\r\n");
out.write("\r\n");
out.write("\tvar DOM = 0, MS = 0, OP = 0, b = 0;\r\n");
out.write("\t");
// Determine the browser type
out.write("\r\n");
out.write("\tfunction CheckBrowser(){\r\n");
out.write("\t\tif (b == 0){\r\n");
out.write("\t\t\tif (window.opera) OP = 1;\r\n");
out.write("\t\t\t// Moz or Netscape\r\n");
out.write("\t\t\tif(document.getElementById) DOM = 1;\r\n");
out.write("\t\t\t// Micro$oft\r\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -