图形化界面复制

写这个程序的前提:由于我的电脑是新买的,想把Mp3里面的歌曲全部复制到电脑上,但发现个问题,由于我的
  Mp3是索尼的,由于它的特殊性,从MP3里复制出来后,是每个文件夹里面就一首歌曲或多首歌曲,手动去复制到一个文件夹里很麻烦,
  所以根据基础测试题写了这个方便复制的小程序。
 

package GUI;
/*
 * 写这个程序的前提:由于为的电脑是新买的,想把Mp3里面的歌曲全部复制到电脑上,但发现个问题,由于我的
 * Mp3是索尼的,由于它的特殊性,从MP3里复制出来后,每个文件夹里面就一首歌曲或多首歌曲,手动去复制到一个文件夹里很麻烦,
 * 所以根据基础测试题写了这个方便复制的小程序
 * */
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TuXingCope {
	private Frame f;
	private Button b;
	private TextArea td;
	private TextField t1,t2;
	private Dialog d;
	private Label lab;
	private Button okBut;
	TuXingCope(){
		window();
	}
	public void window(){
		f =new Frame();
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());//设置窗体布局
		b=new Button("复制到:");
		td=new TextArea(25,70);
		t1=new TextField(30);
		t2=new TextField(30);
		f.add(t1);
		f.add(b);	
		f.add(t2);
		f.add(td);	
		
		
		d = new Dialog(f,"提示信息-self",true);//依赖于f的对话框,true即非要点掉对话框
		d.setBounds(400,200,240,150);//设置对话框长宽高
		d.setLayout(new FlowLayout());//设置对话框布局
		lab = new Label();//创建标签。
		okBut = new Button("确定");//创建确定
		d.add(lab);//将标签添加到对话框中,后期用Set方法设置标签文字
		d.add(okBut);//将按钮添加到对话框中
		
		myEvent();
		f.setVisible(true);
	}
	private void myEvent(){//单独写一个监听器事件。
		f.addWindowListener(new WindowAdapter()//监听器
		{
			public void windowClosing(WindowEvent e)//监听事件
			{
				System.exit(0);
			}
		});
		b.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)//监听事件
			{
				Copy();
			}		
		});
		okBut.addActionListener(new ActionListener()//监听源为“确定”按钮,对话框里的按钮监听事件
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);//根据参数 b 的值显示或隐藏此 Dialog。
			}
		});
		d.addWindowListener(new WindowAdapter()//监听源为对话框,对话框监听事件
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});
		t1.addKeyListener(new KeyAdapter()//监听源为单行文本框,键盘回车实现"复制到"
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					Copy();
			}
		});
	}
	private void Copy(){//复制方法
		String dirPath = t1.getText();
		String dirPath1= t2.getText();
		String dirPath2=dirPath1+"\\";
		FileInputStream fis =null;
		FileOutputStream fos =null;
		//关联输入的路径
		File dir =new File(dirPath);
		//关联输出的路径,没有就创建
		File filewjj=new File(dirPath1);
		if(!filewjj.exists()) filewjj.mkdir();
		//判断文件夹是否存在,监控。
		if(dir.exists() && dir.isDirectory())
		{	
			 td.setText("");
			 NmaeCun s=new NmaeCun();
			 s.showDir(dir);//非静态对象调用
			 //得到添加问元素的List集合;
			 int count=0;
			 List<String> list =s.getInstance();	 
			 Iterator<String> it= list.iterator(); 
			 while(it.hasNext()){
				 String str =it.next();	
				// System.out.println(str); 
				 File fileww =new File(dirPath2+getPath(str));
				 if(fileww.exists())//判断文件是否存在,防止覆盖重名文件,有缺陷
					{
					 fileww = new File(dirPath2+getPath1(str));
					}
				 	try{
						 fis = new FileInputStream(str);				 
						 fos = new FileOutputStream(fileww);
						 int len = 0;
			             byte[] buf = new byte[1024];
			             while((len = fis.read(buf)) != -1){
			            	  fos.write(buf,0,len);		 
						 }	
					}catch(IOException e){
						td.append("复制失败");	
					}
					finally
					{
						 try {
								fis.close();
							} catch (IOException e) {						
								e.printStackTrace();
							}		 
							 try {
								fos.close();
							} catch (IOException e) {
								e.printStackTrace();
							}			 
					}				
					td.append("文件"+str+"被成功复制!"+"\r\n");
					 count++;
			 }
			 td.append("所有文件复制完成,共复制了"+count+"个文件!"+"\r\n");				 
		  }
		  else
		  {
			String info = "您输入的路径:"+dirPath+"是错误的。请重输";
			lab.setText(info);//设置标签文字
			d.setVisible(true);
		  }
	}
	
	 private  String getPath(String str){
		 String n =str.substring(str.lastIndexOf("\\")+1, str.length());
		 return n;
	 }
	 int a =1;
	 //重名文件调养方法。有缺陷,实在解决不了
	 private  String getPath1(String str){
		 a++;
		 String n =
				 str.substring(str.lastIndexOf("\\")+1, str.length()).replace(str.substring(str.lastIndexOf("."), str.length()), "("+a+")"+str.substring(str.lastIndexOf("."), str.length()));	 	 
		 return n;
	 }
	 
	 public static void main(String[] args)  {
		new TuXingCope();			
	 }	
	 
}	
class NmaeCun{
	//定义在外面,防止递归会创建多个对象
	 List<String> l =new ArrayList<String>();
	 public List<String> getInstance()
	 {
		return l;
	 }
	 int count =0;
	 public void showDir(File dir){
		if(count==0){
			l.clear();
		}
		count++;//防止递归的时候再次清理集合里的元素
		File[] files =dir.listFiles();	
		for(int x =0;x<files.length;x++){
			if(files[x].isDirectory()){
				showDir(files[x]);
			}else{
				l.add(files[x].toString());
			}
		}
	}
}


 

<think>好的,用户问的是在Ubuntu图形化界面复制文件夹会不会产生链接。首先,我需要确认用户对Linux的图形界面操作是否熟悉。之前的对话里,用户询问了命令行下的复制方法,现在转向图形界面,可能是在不同场景下的操作需求。 首先,我得回想Ubuntu的文件管理器(比如Nautilus)的复制行为。通常情况下,用图形界面复制文件,无论是拖放还是右键选择复制粘贴,都是默认复制文件本身,而不是创建链接。但用户可能担心是否在某些情况下会意外创建链接,比如是否在特定操作下会生成符号链接或硬链接。 然后,我需要考虑用户可能的误解。例如,用户可能听说过某些情况下文件管理器会使用链接,或者某些特殊文件类型(如快捷方式)可能会导致链接的产生。需要明确说明常规复制操作不会创建链接,而只是复制文件内容。 接下来,可能需要补充图形界面下创建链接的方法,比如右键菜单中的“创建链接”选项,这样用户能区分正常复制和创建链接的不同操作。同时,提醒用户注意操作时的动作,比如拖放时是否按住特定键(如Alt键)可能会改变行为,避免误操作。 另外,用户之前的问题涉及隐藏文件的处理,可能需要提及图形界面是否默认复制隐藏文件,以及如何在图形界面中显示和复制隐藏文件,比如在Nautilus中使用Ctrl+H显示隐藏文件,再进行复制。 最后,确保回答清晰,确认图形界面复制不会产生链接,并给出相关问题,比如如何创建符号链接、隐藏文件处理、复制时权限保留等,这些都是用户可能继续关心的问题。</think>在Ubuntu图形化界面(如文件管理器Nautilus)中复制文件夹时,**默认行为是直接复制文件内容**,不会产生符号链接(symlink)或硬链接(hard link)。具体表现如下: --- ### **复制行为解析** 1. **常规操作**(右键复制/粘贴、拖拽): - 文件内容会被完整复制到目标路径 - 新文件与原文件无关联(修改互不影响) - 元数据(权限、时间戳等)通常会被保留 2. **不会自动创建链接**: - 符号链接需手动操作(右键 → **创建链接**) - 拖拽时按住 `Alt` 键可强制创建符号链接(可自定义行为) --- ### **验证复制结果的方法** 1. **对比文件属性**: ```bash ls -l /路径a/文件名 ls -l /路径b/文件名 ``` - 若非链接,输出中无 `->` 标记 - `inode` 号不同(通过 `ls -i` 查看) 2. **检查文件内容**: 修改原文件后观察副本是否同步变化(无链接时应独立) --- ### **特殊场景注意** - **跨文件系统复制**:自动转为物理复制(无法保留硬链接) - **隐藏文件**:图形界面默认隐藏,需按 `Ctrl+H` 显示后复制 - **权限问题**:若目标路径无写入权限,复制会失败(不会创建链接替代) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值