gpt4 book ai didi

java - java中的文件结构

转载 作者:行者123 更新时间:2023-11-30 03:54:43 25 4
gpt4 key购买 nike

您好,我是 Java 新手,所以我想要一些有关如何在 Java 中组织项目文件的指南。目前我正在构建一个带有 GUI 的应用程序,因此我需要两个文件,一个与 GUI 相关,另一个文件与从第一个调用的任何函数相关。现在,我已将第二个文件命名为 Utilities.java,如下所示:

package Directory;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.swing.JProgressBar;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;


public class Utilities {

public class FileCopy{
private File Source;
private File Destination;
private long totalBytes=0L;

FileCopy(File source,File destination){
Source=source;
Destination=destination;
retrieveTotalBytes(source);
}

File getSource(){return Source;}
File getDestination(){return Destination;}
Long gettotalBytes(){return totalBytes;}

private void retrieveTotalBytes(File sourceFile)
{
if(sourceFile.isDirectory()==false){
totalBytes = sourceFile.length();
}
else{
File[] files = sourceFile.listFiles();
for(File file : files)
{
if(file.isDirectory()) retrieveTotalBytes(file);
else totalBytes += file.length();
}
}
System.out.print("Done retrieving");
}
}


public class Copy extends SwingWorker<Void,Integer>
{

File src,dest;
InputStream in;
OutputStream out;
JProgressBar progressBar;
JProgressBar all;
JTextArea txt;
public int progress;
//private int all_progress;
private long totalBytes = 0L;
private long copiedBytes = 0L;
boolean keepStructure=false;
boolean delete=false;

public Copy(File source,File dst,JProgressBar br,JTextArea text,boolean keep,boolean delete)
{
src=source;
dest=dst;
progressBar=br;
txt=text;
progressBar.setValue(0);
progressBar.setVisible(true);
txt.setText("Copying " + src.getName());
keepStructure=keep;
this.delete=delete;
}

@Override
public Void doInBackground() throws Exception
{
txt.setText(src.getName());
//retrieveTotalBytes(src);
copyFiles(src, dest);

return null;
}

@Override
public void process(java.util.List<Integer> chunks)
{
for(int i : chunks)
{
progressBar.setValue(i);

}
}

@Override
public void done()
{
setProgress(100);
}


public String GetParent(String input){
short pos=(short) input.lastIndexOf(File.separatorChar);
return input.substring(0, pos);
}

private void copyFiles(File sourceFile, File targetFile) throws IOException
{
if(sourceFile.isDirectory())
{
if(!targetFile.exists()) targetFile.mkdirs();

String[] filePaths = sourceFile.list();

for(String filePath : filePaths)
{
File destFile;
File srcFile = new File(sourceFile, filePath);

if(keepStructure==true)
destFile= new File(targetFile, filePath);
else{
String filepath2=GetParent(dest.toString())+File.separatorChar+srcFile.getName();
destFile=new File(filepath2);
}

System.out.print("\n\n name="+destFile.toString()+"\n");
System.out.print("dest to string =" +GetParent(dest.toString()) + " srcFile.getName()="+srcFile.getName()+"\n" );

copyFiles(srcFile, destFile);
}
}
else
{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));

long fileBytes = sourceFile.length();
long soFar = 0L;

int theByte;

while((theByte = bis.read()) != -1)
{
bos.write(theByte);

setProgress((int) (copiedBytes++ * 100 / totalBytes));
publish((int) (soFar++ * 100 / fileBytes));
}

bis.close();
bos.close();
if(delete==true)
sourceFile.delete();
publish(100);
txt.setText("Copying " + src.getName() + "complete");
}
}
}
}

问题1:请注意,在该文件中,我有两个完全不同的子类 {FileCopy,Copy}。这是组织代码的好方法还是应该将每个类移动到每个自己的文件上?

问题2:另外,在我的主要部分中,我尝试从每个类中创建和对象,但我做错了一些事情。我已经添加了文件的导入,但是当我尝试创建一个对象时,例如

Copy worker = new Copy(source,dest,progressBar,textArea, keep_Structure,false);

我收到此错误:

No enclosing instance of type Utilities is accessible. Must qualify the allocation with an enclosing instance of type Utilities (e.g. x.new A() where x is an instance of Utilities).

最佳答案

在 Java 中,您应该(至少在您仍在学习基础知识时)将每个类保存在自己的文件中。

您的文件中有 3 个(而不是 2 个)类:UtilitiesFileCopyCopy,后两个是内部类Utilities(Utilities 类本身不执行任何操作)。这就是为什么在没有先实例化 Utilities 的情况下无法实例化 Copy

我认为你应该有一个名为utilities的包,其中包含两个文件:FileCopy.javaCopy.java,每个文件都包含自己的类。如果您想要一种方法来区分应用程序的各个部分,那么这是一个很好的开始方式:拥有一个包含所有 gui 相关类的包,并为应用程序的其余部分提供另一个包。

这应该可以解决您的错误。

嵌套类的官方教程:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

关于java - java中的文件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com