我想实现简易画板的文件保存功能,但是无法在指定位置保存文件,即无法获取在文件对话框中自定义的保存路径,而把文件保存在项目所在目录。朋友,请赐教!
--------------------------------------------------------------------------------------
save.addActionListener(new ActionListener() //"保存"按钮的监听器
{
public void actionPerformed(ActionEvent e)
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showSaveDialog(p0);//p0是绘图面板对象,即fileChooser的父组件
if (result == JFileChooser.CANCEL_OPTION)
{ return;}
File f = fileChooser.getSelectedFile();
f.canWrite();
if (f.getName().equals(""))
{
JOptionPane.showMessageDialog(fileChooser, "无效的文件名",
"错误提示", JOptionPane.ERROR_MESSAGE);
}
else
{
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(f.getName())); //此处!f.getName()无法获取文件名,但硬编码则可,例如赋值"E:\test.txt"
for(int j = 0; j < p0.m_vectorSet.size(); j ++)
{
Vector<Point> lines = p0.m_vectorSet.get(j);
Color cols = p0.m_colorset.get(j);
BasicStroke stk = (BasicStroke) p0.m_strokeset.get(j);
bw.write(Integer.toString(cols.getRed())+" ");
bw.write(Integer.toString(cols.getGreen())+" ");
bw.write(Integer.toString(cols.getBlue())+" ");
bw.newLine();
bw.write(Integer.toString((int)stk.getLineWidth()));
bw.newLine();
for(int k = 0; k < lines.size(); k ++)
{
Point pt = lines.get(k);
bw.write(Integer.toString(pt.x)+" ");
bw.write(Integer.toString(pt.y)+" ");
bw.newLine();
}
bw.newLine();
}
bw.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
});
--------------------------------------------------------------------------------------
save.addActionListener(new ActionListener() //"保存"按钮的监听器
{
public void actionPerformed(ActionEvent e)
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showSaveDialog(p0);//p0是绘图面板对象,即fileChooser的父组件
if (result == JFileChooser.CANCEL_OPTION)
{ return;}
File f = fileChooser.getSelectedFile();
f.canWrite();
if (f.getName().equals(""))
{
JOptionPane.showMessageDialog(fileChooser, "无效的文件名",
"错误提示", JOptionPane.ERROR_MESSAGE);
}
else
{
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(f.getName())); //此处!f.getName()无法获取文件名,但硬编码则可,例如赋值"E:\test.txt"
for(int j = 0; j < p0.m_vectorSet.size(); j ++)
{
Vector<Point> lines = p0.m_vectorSet.get(j);
Color cols = p0.m_colorset.get(j);
BasicStroke stk = (BasicStroke) p0.m_strokeset.get(j);
bw.write(Integer.toString(cols.getRed())+" ");
bw.write(Integer.toString(cols.getGreen())+" ");
bw.write(Integer.toString(cols.getBlue())+" ");
bw.newLine();
bw.write(Integer.toString((int)stk.getLineWidth()));
bw.newLine();
for(int k = 0; k < lines.size(); k ++)
{
Point pt = lines.get(k);
bw.write(Integer.toString(pt.x)+" ");
bw.write(Integer.toString(pt.y)+" ");
bw.newLine();
}
bw.newLine();
}
bw.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
});
然后用正则表达式截取文件名
恩恩,刚试过,可行!但是仍然疑惑getName()无法获取文件名!很想很想弄清楚问题到底出在哪里!!