Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用weka.jar将CSV文件转换为ARFF_Java_Weka - Fatal编程技术网

Java 使用weka.jar将CSV文件转换为ARFF

Java 使用weka.jar将CSV文件转换为ARFF,java,weka,Java,Weka,对于我的项目,我使用weka.jar。我正在使用以下代码将CSV文件转换为ARFF: import weka.core.Instances; import weka.core.converters.ArffSaver; import weka.core.converters.CSVLoader; import java.io.File; public class CsvArffConverter { public static void Convert(String sourcepath

对于我的项目,我使用weka.jar。我正在使用以下代码将CSV文件转换为ARFF:

import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;

import java.io.File;

public class CsvArffConverter
{

 public static void Convert(String sourcepath,String destpath) throws Exception
 {
 // load CSV
 CSVLoader loader = new CSVLoader();
 loader.setSource(new File(sourcepath));
 Instances data = loader.getDataSet();

 // save ARFF
 ArffSaver saver = new ArffSaver();
 saver.setInstances(data);
 saver.setFile(new File(destpath));
 saver.setDestination(new File(destpath));
 saver.writeBatch();
 }
 public static void main(String args[]) throws Exception
 {
 Convert("C:\\ad\\BSEIT.csv", "C:\\ad\\test.arff");

 }
}
但是,在执行时,我遇到以下错误:

无法创建新的输出文件。使用标准输出。
线程“main”java.io.IOException中的异常:无法创建新的输出文件(原因:java.io.IOException:文件已存在)。使用标准输出。
在“在此处输入代码”weka.core.converters.AbstractFileSaver.setDestination(AbstractFileSaver.java:421)
位于Predictor.CsvArffConverter.Convert(CsvArffConverter.java:29)
位于Predictor.CsvArffConverter.main(CsvArffConverter.java:34)
根据,此错误是文件问题,可能是权限问题。其他电子邮件建议用于保存arff文件

试试下面的代码

import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;

import java.io.File;

public class CsvArffConverter
{
    public static void Convert(String sourcepath,String destpath) throws Exception
    {
        // load CSV
        CSVLoader loader = new CSVLoader();
        loader.setSource(new File(sourcepath));
        Instances dataSet = loader.getDataSet();

        // save ARFF
        BufferedWriter writer = new BufferedWriter(new FileWriter(destpath));
        writer.write(dataSet.toString());
        writer.flush();
        writer.close(); 
    }

    public static void main(String args[]) throws Exception
    {
        Convert("BSEIT.csv", "test.arff");
    }
}

如您所见,我使用相对路径。因为绝对路径写入可能由于权限问题而被阻止

解决方案:使用3.5.3以上版本的Weka调用saver.setDestination(新文件(args[1]);不再需要,它将在saver.setFile(新文件(args[1])中自动完成;方法。我在以“.arff”格式保存数据集文件时遇到了同样的问题,覆盖了旧的数据集文件。有时它像一个符咒,有时它抛出同样的例外。不做任何更改,只需重新运行我的代码。同样的精确条件。这可能是因为Windows 7有时会阻止文件,因此不允许删除?顺便说一句,我正在使用“ConverterUtils.DataSink.write(destinationFilePath,datasetObject);”,这是一种高层结构,允许Weka类管理底层细节。我也有同样的问题,但这个解决方案对我不起作用。
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;

import java.io.File;

public class CsvArffConverter
{
    public static void Convert(String sourcepath,String destpath) throws Exception
    {
        // load CSV
        CSVLoader loader = new CSVLoader();
        loader.setSource(new File(sourcepath));
        Instances dataSet = loader.getDataSet();

        // save ARFF
        BufferedWriter writer = new BufferedWriter(new FileWriter(destpath));
        writer.write(dataSet.toString());
        writer.flush();
        writer.close(); 
    }

    public static void main(String args[]) throws Exception
    {
        Convert("BSEIT.csv", "test.arff");
    }
}