Java Weka - 无法创建新的输出文件。使用标准输出
Java Weka - Cannot create a new output file. Standard out is used
我有一个 Java 程序可以将 CSV 文件转换为 Weka 的 ARFF 格式。
它在任何给定会话中首次 运行 时运行完美,但随后总是失败并显示消息:
Cannot create a new output file. Standard out is used.
程序如下:
import java.io.File;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
public class CSV2Arff {
/**
* takes 2 arguments:
* - CSV input file
* - ARFF output file
* @param args
* @throws java.lang.Exception
*/
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n");
System.exit(1);
}
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
//saver.setDestination(new File(args[1]));
saver.writeBatch();
}
}
来自控制台的完整错误:
Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Oct 31, 2016 3:53:39 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 6142 ms
Cannot create a new output file. Standard out is used.
我认为 ArffSaver
不会覆盖该文件。如果要覆盖它,请在设置为目标之前删除文件(如果存在)。如果您想要连接数据,请尝试 writeIncremental
你有:
saver.setFile(new File(args[1]));
我会选择类似的东西:
File f = new File(args[1]);
if(f.exists()) {
f.delete();
};
saver.setFile(new File(args[1]);
按照weka mail list, this error is a file issue. Other emails suggest to use Java I/O approch保存arff文件。
This error is coming from the CSVSaver and indicates that it is unable
to create the directory and/or file that you've specified. More than
likely it is something to do with permissions on where it is trying to
write to.
试试下面的代码。
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.File;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
public class CSV2Arff {
/**
* takes 2 arguments:
* - CSV input file
* - ARFF output file
* @param args
* @throws java.lang.Exception
*/
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n");
System.exit(1);
}
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
String fileName = args[1];
// save ARFF
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(data.toString());
writer.flush();
writer.close();
}
}
我有一个 Java 程序可以将 CSV 文件转换为 Weka 的 ARFF 格式。
它在任何给定会话中首次 运行 时运行完美,但随后总是失败并显示消息:
Cannot create a new output file. Standard out is used.
程序如下:
import java.io.File;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
public class CSV2Arff {
/**
* takes 2 arguments:
* - CSV input file
* - ARFF output file
* @param args
* @throws java.lang.Exception
*/
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n");
System.exit(1);
}
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
//saver.setDestination(new File(args[1]));
saver.writeBatch();
}
}
来自控制台的完整错误:
Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-nio-8080"] Oct 31, 2016 3:53:39 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-nio-8009"] Oct 31, 2016 3:53:39 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 6142 ms Cannot create a new output file. Standard out is used.
我认为 ArffSaver
不会覆盖该文件。如果要覆盖它,请在设置为目标之前删除文件(如果存在)。如果您想要连接数据,请尝试 writeIncremental
你有:
saver.setFile(new File(args[1]));
我会选择类似的东西:
File f = new File(args[1]);
if(f.exists()) {
f.delete();
};
saver.setFile(new File(args[1]);
按照weka mail list, this error is a file issue. Other emails suggest to use Java I/O approch保存arff文件。
This error is coming from the CSVSaver and indicates that it is unable to create the directory and/or file that you've specified. More than likely it is something to do with permissions on where it is trying to write to.
试试下面的代码。
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.File;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
public class CSV2Arff {
/**
* takes 2 arguments:
* - CSV input file
* - ARFF output file
* @param args
* @throws java.lang.Exception
*/
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n");
System.exit(1);
}
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
String fileName = args[1];
// save ARFF
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(data.toString());
writer.flush();
writer.close();
}
}