急!求教Java高手!以下是我的Java代码,我在注释中写明了我的想法,和问题,请高手指点!谢谢! 50
/*我想实现的功能例如将原本D:\test中所有文件,统一命名成类似图片1.jpg,图片2.jpg。。让用户输入想要自动命名的文件夹路径和文件统一命的名称(如图片),然后...
/*我想实现的功能例如将原本D:\test中所有文件,统一命名成类似图片1.jpg,图片2.jpg。。让用户输入想要自动命名的文件夹路径和文件统一命的名称(如图片),然后再让用户输入想要自动命名的文件类型(jgp等)*/import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;class jfr extends JFrame {String getpath;String gettype;String getname;JTextField jf1 = new JTextField();//接收用户输入的文件夹路径JTextField jf2 = new JTextField();//接收用户输入的文件夹下的文件类型JTextField jf3=new JTextField();//接收用户输入的文件夹下的文件统一的名称ImageIcon bu = new ImageIcon("button.gif");//这个图片我放在了目录下,由于是提问我发送不成图片JButton sure, cancel;public jfr() {Container cp;cp = getContentPane();setSize(400, 400);setLocation(640, 400);setTitle("文件自动批量命名工具");setBackground(Color.blue);setLayout(new GridLayout(4, 2));setVisible(true);cp.add(new JLabel("请输入您要批量命名的文件\n所在文件夹路径"));cp.add(jf1);cp.add(new JLabel("请输入您要批量命名的文件\n的文件类型,如\"txt\",\"doc\"等"));cp.add(jf2);cp.add(new JLabel("请输入您要批量处理的文件\n前缀名:"));cp.add(jf3);sure = new JButton("确定", bu);cancel = new JButton("取消", bu);cp.add(sure);cp.add(cancel);jf1.addActionListener(new actionlisten1()); jf2.addActionListener(new actionlisten2());sure.setActionCommand("正在批量命名中,请稍后!");sure.addActionListener(new bu1());cancel.addActionListener(new bu2());addWindowListener(new windowlisten());}//以下用来实现监听三个文本框的输入,由于字数限制,只写一个class actionlisten1 implements ActionListener {public void actionPerformed(ActionEvent e) {getpath = jf1.getText();}}//监听按钮确定cass bu1 implements ActionListener {public void actionPerformed(ActionEvent e) {System.out.println;sure.getActionCommand());exchange ex=new exchange(gettype,gettype,getname); boolean an=ex.exchangefiles();if(an)System.out.println("文件批量命名完毕,请查阅!");}}//监听取消按钮class bu2 implements ActionListener {public void actionPerformed(ActionEvent e) {System.out.println("已经取消");}}}class windowlisten extends WindowAdapter {public void windowClosing(WindowEvent e) {System.exit(0);}}//这个类我没有定义成类中类,用来实现文件的重命名class exchange{String getpath;String gettype;String getname;public exchange(String getp,String gett,String getn){getpath=getp;gettype=gett;getname=getn;}//这个方法用来实现改变文件的名称public boolean exchangefiles(){getpath=exchangestring(getpath);File f1=new File(getpath); String files[]=f1.list(); for(int i=0;i<=files.length;i++){ File f2=new File(getpath+files[i]);File f3=new File(getpath+"\\"+getname+i+"."+gettype);f3.renameTo(f2); return true;}//此方法用来转换用户输入的文件夹路径中'\',将其转换为'\\'public String exchangestring(String s){for(int i=0;i<s.length();i++){if(s.charAt(i)=='\\'){//目前我遇到的问题就是这样,无法将路径中的'\'换成'\\'s=s.substring(0,i)+"\\\\"+s.substring(i);System.out.println("test!");}}return s;}}public class test {public static void main(String[] args){jfr jf = new jfr();}}
展开
7个回答
展开全部
/*我想实现的功能例如将原本D:\test中所有文件,
* 统一命名成类似图片1.jpg,图片2.jpg。。
* 让用户输入想要自动命名的文件夹路径和文件统一命的名称(如图片),
* 然后再让用户输入想要自动命名的文件类型(jgp等)*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class jfr extends JFrame {
String getpath;
String gettype;
String getname;
JTextField jf1 = new JTextField();// 接收用户输入的文件夹路径
JTextField jf2 = new JTextField();// 接收用户输入的文件夹下的文件类型
JTextField jf3 = new JTextField();// 接收用户输入的文件夹下的文件统一的名称
ImageIcon bu = new ImageIcon("button.gif");// 这个图片我放在了目录下,由于是提问我发送不成图片
JButton sure, cancel;
public jfr() {
Container cp;
cp = getContentPane();
setSize(400, 400);
setLocation(640, 400);
setTitle("文件自动批量命名工具");
setBackground(Color.blue);
setLayout(new GridLayout(4, 2));
setVisible(true);
cp.add(new JLabel("请输入您要批量命名的文件\n所在文件夹路径"));
cp.add(jf1);
cp.add(new JLabel("请输入您要批量命名的文件\n的文件类型,如\"txt\",\"doc\"等"));
cp.add(jf2);
cp.add(new JLabel("请输入您要批量处理的文件\n前缀名:"));
cp.add(jf3);
sure = new JButton("确定", bu);
cancel = new JButton("取消", bu);
cp.add(sure);
cp.add(cancel);
jf1.addActionListener(new actionlisten1());
jf2.addActionListener(new actionlisten1());
sure.setActionCommand("正在批量命名中,请稍后!");
sure.addActionListener(new bu1());
cancel.addActionListener(new bu2());
addWindowListener(new windowlisten());
}// 以下用来实现监听三个文本框的输入,由于字数限制,只写一个
class actionlisten1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getpath = jf1.getText();
}
}// 监听按钮确定
class bu1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println(sure.getActionCommand());
exchange ex = new exchange(gettype, gettype, getname);
boolean an = ex.exchangefiles();
if (an)
System.out.println("文件批量命名完毕,请查阅!");
}// 监听取消按钮
}
class bu2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("已经取消");
}
}
class windowlisten extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}// 这个类我没有定义成类中类,用来实现文件的重命名
class exchange {
String getpath;
String gettype;
String getname;
public exchange(String getp, String gett, String getn) {
getpath = getp;
gettype = gett;
getname = getn;
}// 这个方法用来实现改变文件的名称
public boolean exchangefiles() {
getpath = exchangestring(getpath);
File f1 = new File(getpath);
String files[] = f1.list();
for (int i = 0; i <= files.length; i++) {
File f2 = new File(getpath + files[i]);
File f3 = new File(getpath + "\\" + getname + i + "." + gettype);
f3.renameTo(f2);
}
return true;
}// 此方法用来转换用户输入的文件夹路径中'\',将其转换为'\\'
public String exchangestring(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '\\') {
// 目前我遇到的问题就是这样,无法将路径中的'\'换成'\\'
s = s.substring(0, i) + "\\\\" + s.substring(i);
System.out.println("test!");
}
}
return s;
}
}
}
public class test {
public static void main(String[] args) {
jfr jf = new jfr();
}
}
//自己好好看看。这东西错误好多阿。
//什么错误都有。我就给你改了。另外test是另一个 .java文件中写的。自己看看
//还有就是我只是把你的程序改的不报错误了!
* 统一命名成类似图片1.jpg,图片2.jpg。。
* 让用户输入想要自动命名的文件夹路径和文件统一命的名称(如图片),
* 然后再让用户输入想要自动命名的文件类型(jgp等)*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class jfr extends JFrame {
String getpath;
String gettype;
String getname;
JTextField jf1 = new JTextField();// 接收用户输入的文件夹路径
JTextField jf2 = new JTextField();// 接收用户输入的文件夹下的文件类型
JTextField jf3 = new JTextField();// 接收用户输入的文件夹下的文件统一的名称
ImageIcon bu = new ImageIcon("button.gif");// 这个图片我放在了目录下,由于是提问我发送不成图片
JButton sure, cancel;
public jfr() {
Container cp;
cp = getContentPane();
setSize(400, 400);
setLocation(640, 400);
setTitle("文件自动批量命名工具");
setBackground(Color.blue);
setLayout(new GridLayout(4, 2));
setVisible(true);
cp.add(new JLabel("请输入您要批量命名的文件\n所在文件夹路径"));
cp.add(jf1);
cp.add(new JLabel("请输入您要批量命名的文件\n的文件类型,如\"txt\",\"doc\"等"));
cp.add(jf2);
cp.add(new JLabel("请输入您要批量处理的文件\n前缀名:"));
cp.add(jf3);
sure = new JButton("确定", bu);
cancel = new JButton("取消", bu);
cp.add(sure);
cp.add(cancel);
jf1.addActionListener(new actionlisten1());
jf2.addActionListener(new actionlisten1());
sure.setActionCommand("正在批量命名中,请稍后!");
sure.addActionListener(new bu1());
cancel.addActionListener(new bu2());
addWindowListener(new windowlisten());
}// 以下用来实现监听三个文本框的输入,由于字数限制,只写一个
class actionlisten1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getpath = jf1.getText();
}
}// 监听按钮确定
class bu1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println(sure.getActionCommand());
exchange ex = new exchange(gettype, gettype, getname);
boolean an = ex.exchangefiles();
if (an)
System.out.println("文件批量命名完毕,请查阅!");
}// 监听取消按钮
}
class bu2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("已经取消");
}
}
class windowlisten extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}// 这个类我没有定义成类中类,用来实现文件的重命名
class exchange {
String getpath;
String gettype;
String getname;
public exchange(String getp, String gett, String getn) {
getpath = getp;
gettype = gett;
getname = getn;
}// 这个方法用来实现改变文件的名称
public boolean exchangefiles() {
getpath = exchangestring(getpath);
File f1 = new File(getpath);
String files[] = f1.list();
for (int i = 0; i <= files.length; i++) {
File f2 = new File(getpath + files[i]);
File f3 = new File(getpath + "\\" + getname + i + "." + gettype);
f3.renameTo(f2);
}
return true;
}// 此方法用来转换用户输入的文件夹路径中'\',将其转换为'\\'
public String exchangestring(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '\\') {
// 目前我遇到的问题就是这样,无法将路径中的'\'换成'\\'
s = s.substring(0, i) + "\\\\" + s.substring(i);
System.out.println("test!");
}
}
return s;
}
}
}
public class test {
public static void main(String[] args) {
jfr jf = new jfr();
}
}
//自己好好看看。这东西错误好多阿。
//什么错误都有。我就给你改了。另外test是另一个 .java文件中写的。自己看看
//还有就是我只是把你的程序改的不报错误了!
追问
抱歉啊,可能是我粘贴的缘故吧,有很多错误。谢谢你帮我整理啊!这样的,我编译,运行都没有问题,但是只要按到“|确定”按钮就出现了问题,就会抛出异常。我认为应该是文件没有命名成功的原因,而在exchange类中,我在exchangestring方法中测试了,发现没有转换路径成功,我认为问题出在这里。你觉得呢?
追答
lz可以这样把异常贴出来!然后我建议lz
class actionlisten1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getpath = jf1.getText();
System.out.println(getpath+"=========");//看看这东西是不是被调用了。是不是为空
}
}
还有下面的方法:
public static String exchangestring(String s) {
String str=null;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)=='\\') {
// // 目前我遇到的问题就是这样,无法将路径中的'\'换成'\\'
str = s.substring(0, i) + "\\\\" + s.substring(i+1);
//s = s.substring(0, i) + "\\\\" + s.substring(i+1); 看看lz的这句,在这里假如s=D:\test
//那么这句运行结束的时候s=D:\\test 然后i++即加了1刚才在第一个\处。
//i++哪么就是在第二个\哪么又会执行if中的将第二个\换为了\\,i++后到了第三个\哪么又会换为\\这样成了死循环了
// System.out.println(s);
}
}
return str;
}
展开全部
一把无情的刀插入了我的心脏.....心好痛啊!头一次见有人这么写代码还带注释的,更那个啥的是,竟然还有理由!BS你!
追问
这由于百度字数的限制,我只能这样粘贴下来,加上注释是为了更好地说明。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
目前我遇到的问题就是这样,无法将路径中的'\'换成'\\',应该是要转义,用4个\能代替一个\。你提问的方式不对,要一次提一个问题,这样人家才好回答。
追问
我试过了将路径中的'\'换成'\\',但是不行。我感觉就是一个问题:实现将用户输入的文件夹路径中的'\'替换成‘\\’,请高手指教!
追答
如果要表示java源码中的正则表达式的一个正常的'\'字符,则需要这样表示'\\\\',其中第一第三个'\'均表示java编译器中的转义字符第二个则表示正则表达式中的转义字符,从而把第四个'\'转义为正则表达式中一个普通的'\'字符.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public String exchangestring(String s)
{for(int i=0;i<s.length();i++)
{if(s.charAt(i)=='\\')
{s=s.substring(0,i)+"\\\\"+s.substring(i+1);
i=i+1;
System.out.println("test!");
}}
return s;}}
s.substring(i)改为s.substring(i+1)
后面再加一句i=i+1;因为换了之后,长度变长了,如果这里不加的话会死循环
{for(int i=0;i<s.length();i++)
{if(s.charAt(i)=='\\')
{s=s.substring(0,i)+"\\\\"+s.substring(i+1);
i=i+1;
System.out.println("test!");
}}
return s;}}
s.substring(i)改为s.substring(i+1)
后面再加一句i=i+1;因为换了之后,长度变长了,如果这里不加的话会死循环
追问
谢谢啊,刚刚我测试了一下,发现还是不行。和我之前的情况一样,编译运行都没有错误,但是按到“确定”的时候出现了抛出异常错误,也就是说exchangestring方法没有实现为用户的文件修改名字成功。另外,我觉得没必要让i+=1;吧?就算字符串变化,i<s.length();这个条件限制着它的吧?s.substring(i+1),应该漏掉了前面的字符吧?我觉得还是s.substring(i)啊。
追答
你前面的大堆代码我没看,但是这个函数我修改了后测试下是OK的阿
public String exchangestring()
{
String s="C:\\abc\\def";
System.out.println("before converted:"+s);
for(int i=0;i<s.length();i++)
{if(s.charAt(i)=='\\')
{s=s.substring(0,i)+"\\\\"+s.substring(i+1);
i=i+1;
}}
System.out.println("after converted:"+s);
return s;}}
输出结果如下:
C:\abc\def
C:\\abc\\def
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要求太高,分太低,估计没高手给你解释,新手友情提醒 这个问题不菜鸟啊,要写出这么一个东西,得死很多脑细胞的,分数太低了 我也不太清楚,可以
追问
好,谢谢。我再加得分。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果可以,把你的源码发到
dingjunfen@163.com
晚上回去帮你看一下。
dingjunfen@163.com
晚上回去帮你看一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询