黑马程序员技术交流社区
标题:
分享一个Ubuntu下文件判断的小问题
[打印本页]
作者:
freehiker
时间:
2013-9-24 12:57
标题:
分享一个Ubuntu下文件判断的小问题
在写图形化界面,打开保存小工具的时候,有些地方和windows稍有不同
主要是注意以下两个方面:
1.Ubuntu下的最近打开文件,无法直接获取目录路径
2.文件权限问题
大概问题如下:
windows下打开有直接目录路径,而Ubuntu下显示的是最近打开文件,这样就导致获取不到文件目录(即getDirectory()为null),
所以就需要根据获取的文件建立对象后,通过这个对象来获取文件的绝对路径(getAbsolutePath())来解决这个问题了
还有一个问题就是,一定要清楚是否有权限获取文件,有时候即使文件目录都正确,但是去没权限,那也一样会报空指针异常
现在贴上具体的代码:
需要修改的地方有注释
/*
* 练习题:
* 制作一个图形画界面的编辑器,包含打开、保存功能,再通过包封装,
* 并用jar打包,且jar包需要具备双击运行的功能
*/
package runpack;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class AwtRunJar {
private Frame f;
private MenuBar mb;
private Menu m;
private MenuItem openItem;
private MenuItem saveItem;
private FileDialog openDia;
private FileDialog saveDia;
private MenuItem exitItem;
private TextArea ta;
private File file;
public void init()
{
f = new Frame("简易编辑器");
f.setBounds(500,200,400,512);
f.setLayout(new FlowLayout());
mb = new MenuBar();
m = new Menu("菜单");
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
exitItem = new MenuItem("退出");
mb.add(m);
m.add(openItem);
m.add(saveItem);
m.add(exitItem);
ta = new TextArea(29,45);
f.setMenuBar(mb);
f.add(ta);
MyEvent();
f.setVisible(true);
}
private void MyEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.exit(0);
}
});
openItem.addActionListener(new ActionListener()
{
BufferedReader bfr;
public void actionPerformed(ActionEvent ae)
{
openDia = new FileDialog(f,"OPEN",FileDialog.LOAD);
openDia.setVisible(true);
//String dir = openDia.getDirectory();
String filename = openDia.getFile();
if(filename ==null) //if(dir == null || filename ==null) Ubuntu下有“最近使用的”dir会为null
return ;
file = new File(filename);
String filePath = file.getAbsolutePath(); //需要考虑该文件是否有权限读取
try
{
bfr = new BufferedReader(new FileReader(filePath));
String len = null;
System.out.println(filePath);
ta.setText("");
while((len=bfr.readLine())!=null)
{
ta.append(len+"\r\n");
}
}
catch (IOException e)
{
throw new RuntimeException("文件读取失败");
}
finally
{
try
{
if(bfr!=null);
bfr.close();
}
catch (IOException io)
{
throw new RuntimeException("文件关闭失败");
}
}
}
});
saveItem.addActionListener(new ActionListener()
{
BufferedWriter bfw;
public void actionPerformed(ActionEvent ae)
{
if(file==null)
{
saveDia = new FileDialog(f,"保存",FileDialog.SAVE);
saveDia.setVisible(true);
String dir = saveDia.getDirectory();
String filename = saveDia.getFile();
if(dir==null||filename==null)
return;
file = new File(dir,filename);
saveText();
}
else
{
saveText();
}
}
public void saveText()
{
try
{
bfw = new BufferedWriter(new FileWriter(file));
bfw.write(ta.getText());
bfw.flush();
}
catch (IOException e)
{
throw new RuntimeException("文件保存失败");
}
finally
{
try
{
if(bfw!=null)
bfw.close();
}
catch(IOException e)
{
throw new RuntimeException("文件关闭失败");
}
}
}
});
}
public static void main(String[] args) {
AwtRunJar awt =new AwtRunJar();
awt.init();
}
}
复制代码
作者:
许庭洲
时间:
2013-9-25 08:00
值得学习ing!
作者:
许庭洲
时间:
2013-9-25 08:04
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2