A. java 怎樣復制一個類
直接無視1樓
實現Cloneable介面,重載clone方法即可
public class A implements Cloneable {
public String name;
public Object clone() {
A o = null;
try {
o = (A) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
B. java 如何拷貝整個目錄,類似x
有兩種方法可以使用:
1、我們可以使用java的File類,使用遞歸演算法遍歷文件夾及其所有層的子文件夾,這種寫法非常繁瑣且效率不高,不推薦使用。
2、直接使用Windows的x命令
示例代碼
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main( String[] args ) throws IOException
{
/*在dos窗口:x C:\源文件 D:\源文件\/S/E*/
/*字元所需的格式:x C:\\源文件 D:\\源文件\\/S/E*/
System.out.println( "請輸入源文件的地址欄路徑:" );
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
String input = br.readLine();
/*將地址中的單斜杠變為雙斜杠*/
String from = input.replaceAll( "\\\\", "\\\\\\\\" );
/*獲取文件名*/
String name_file = from.substring( from.lastIndexOf( "\\" ) + 1, from.length() );
/*把目標拷貝到D盤根目錄*/
String to = "D:\\" + name_file + "\\/S/E";
/*拼裝命令*/
String cmd = "cmd.exe /C x " + from + " " + to;
/*執行命令*/
java.lang.Runtime.getRuntime().exec( cmd );
System.out.println( "文件拷貝完畢。" );
System.out.println( "文件已經拷貝到:D:\\" + name_file );
}
}
C. java中怎麼實現實體類的拷貝
Java實現文件拷貝其實質上就是使用java提供的三種文件流操作,位元組流,字元流,二進制流。
位元組流:FileInputStream 與 FileOutputStream
使用示例:
void File(File oldFile, File newFile){
FileOutputStream outputStream = new FileOutputStream(newFile,true);
FileInputStream inputStream = new FileInputStream(oldFile);
byte []wxj = new byte[1024];
int length = inputStream.read(wxj);
while(length!=-1){
outputStream.write(wxj,0,length);
length = inputStream.read(wxj);
}
}
字元流:FileReader 和 FileWriter
使用示例:
void File(File oldFile, File newFile){
Writer writer = new FileWriter(newFile,true);
Reader reader = new FileReader(oldFile);
char []wxj = new char[1024];
int length = reader.read(wxj);
while(length!=-1){
writer.write(wxj,0,length);
length = reader.read(wxj);
}
}
二進制流:DataInputStream 和 DataOutputStream
使用示例:
void File(File oldFile, File newFile){
FileOutputStream outputStream = new FileOutputStream(newFile,true);
FileInputStream inputStream = new FileInputStream(oldFile);
DataInputStream dataInput = new DataInputStream(inputStream);
DataOutputStream dataOutput = new DataOutputStream(outputStream);
byte []wxj = new byte[1024];
int length = dataInput.read(wxj);
while(length!=-1){
dataOutput.write(wxj,0,length);
length = dataInput.read(wxj);
}
}
總結一下:位元組流讀取文件的單位為位元組,對於英語字母(只佔一個位元組)不受任何影響,而對於中文文字在unicode編碼為兩個位元組(或者以上?)則可能會造成影響;字元流讀取文件的單位為字元,沒有上述位元組流的弊端,而且其提供緩沖區讀取/寫入,更加方便與高效;二進制流本質上也屬於位元組流,但是它在讀取/寫入文件時把文件內容轉化為二進制的方式讀取/寫入,不易出錯而且極為高效,一般用於讀取/寫入視頻等大文件信息。
D. java如何拷貝文件到另一個目錄下
下面列舉出4種方式:
1、使用FileStreams復制
這是最經典的方式將一個文件的內容復制到另一個文件中。 使用FileInputStream讀取文件A的位元組,使用FileOutputStream寫入到文件B。正如你所看到的我們執行幾個讀和寫操作try的數據,所以這應該是一個低效率的,下一個方法我們將看到新的方式。 這是第一個方法的代碼:
E. JAVA如何實現深拷貝
下面給你簡單介紹protected 域(或方法)實現過程思路:
protected 域(或方法)對本包內的所有類可見(當然包括子類),那麼,子類可以獲得訪超類受保護域(或方法)的權利,但是,若子類和超類不在同一個包下,就不能訪問超類對象的這個受保護域(或方法)。
淺拷貝與深拷貝
Object類對自己的具體子類的域一無所知,Object類的clone方法只是將各個域進行拷貝。數值或基本類型不會出現問題,但是,如果在對象中包含了引用對象,這些對象的內容沒有被自我復制,拷貝的結果也即是原始對象和拷貝對象引用著同一個引用對象(一般地,動詞「引用」可理解為「管理」,就是指向同一內存)。
淺拷貝滿足:
x.clone() != x為 true,
x.clone().getClass() == x.getClass()為true,
((x.clone().field1 ) == (x. field1))&& … &&((x.clone().fieldN )==(x. fieldN))也為 true 。
如果原始對象與淺拷貝對象共同引用(管理、指向)的引用對象是不可變的,將不會產生任何問題
如果原始對象管理的引用對象是可變的,就必須需重新定義clone方法,來實現深層次的拷貝。要對涉及的每一個類,判斷以下兩點:
默認的clone方法是否滿足需求。
默認的clone方法是否能通過調用可變引用對象的clone方法得到解決。
對涉及的每一個類,深拷貝要滿足:
x.clone() != x為 true,
x.clone().getClass() == x.getClass()為true,
x.clone().equals(x)也為 true ,當然equals方法是如此重寫過的。
Object類中的clone方法被聲明為protected,防止出現文章開頭所提到的,子類和超類不在同一個包下的情況,要聲明clone為public,來實現深拷貝
F. JAVA中對象具有類定義的所以變數的一份拷貝,這句話有什麼不對
java中的類對象沒有拷貝,只是一個指向原來對象空間的一個引用,如果想要新建的另外拷貝
G. JAVA 中淺拷貝與深拷貝有什麼區別
淺拷貝 指的是你的類本身被拷貝,而沒有拷貝類本身屬性中的類
深拷貝 指的是包含類本身和屬性類在內的所有類的拷貝。
簡單點說:
就是淺拷貝的兩個對象中的屬性還會指向同一個類,而深拷貝則全部單獨了。也就是說深拷貝把關聯關系也拷貝了。
具體例子你可以參看我的blog,裡面篇文章介紹:)
H. java中如何將一個類的成員變數復制到另一個類中
用extends繼承,直接使用父類的變數,缺點:不能繼承其他類
用getter,通過getter獲取變數,缺點:過多setter和getter容易破壞代碼的可維護性
創建類的實例,然後調用實例的值,缺點:如果長時間不用實例化的對象,會被自動回收
適用reflection反射機制,導入java.lang.reflect包,以此來調用類裡面的變數,缺點:開發環境不可以有安全限制,可移植性差
用介面,把變數放到一個介面裡面,然後共享數據的類實現這個介面,缺點:暫時沒想到
I. java 拷貝對象工具類有哪些
其他普通類::從beanInfo【每一個對象都有一個緩存的bean信息,包含屬性欄位等】取出name,然後把sourceClass和targetClass逐個拷貝
J. java怎樣用File類拷貝文件夾
使用 java.io.File listFiles得到列表, 判斷是文件夾則創建、文件則拷貝
~~~~~~~~~~~~~~~