java如何创建文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何创建文件?相关的知识,希望对你有一定的参考价值。

参考技术A public void createFile()\\x0d\\x0a\\x0d\\x0a//path表示你所创建文件的路径\\x0d\\x0aString path = "d:/tr/rt";\\x0d\\x0aFile f = new File(path);\\x0d\\x0aif(!f.exists())\\x0d\\x0a f.mkdirs();\\x0d\\x0a \\x0d\\x0a// fileName表示你创建的文件名;为txt类型;\\x0d\\x0aString fileName="test.txt";\\x0d\\x0aFile file = new File(f,fileName);\\x0d\\x0aif(!file.exists())\\x0d\\x0atry \\x0d\\x0afile.createNewFile();\\x0d\\x0a catch (IOException e) \\x0d\\x0a// TODO Auto-generated catch block\\x0d\\x0ae.printStackTrace();\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a//现在你可以在d:/tr/rt 目录下找到test.txt文件

如何从java中的数组创建ARFF文件?

【中文标题】如何从java中的数组创建ARFF文件?【英文标题】:How to create an ARFF file from an array in java? 【发布时间】:2012-10-08 20:53:14 【问题描述】:

我想获得由 java 中的两个数组表示的 x-y 对的加权线性回归的系数。我已经将注意力集中在 weka 上,但它正在询问“LinearRegression”类中的“Instances”类对象。要创建“Instances”类文件,需要一个包含数据的 ARFF 文件。我遇到了使用 FastVector 类的解决方案,但现在在最新的 weka 版本中已弃用。如何为 x-y 对和对应的权重创建一个 ARFF 文件,这些都由 java 中的数组表示?

这是我基于 Baz 回答的代码。它在最后一行“lr.buildClassifier(newDataset)”上给出了一个异常 - 线程 [main] (Suspended (exception UnassignedClassException)) Capabilities.testWithFail(Instances) 行: 1302 。这是代码 -

public static void test() throws Exception

    double[][] data = 4058.0, 4059.0, 4060.0, 214.0, 1710.0, 2452.0, 2473.0, 2474.0, 2475.0, 2476.0, 2477.0, 2478.0, 2688.0, 2905.0, 2906.0, 2907.0, 2908.0, 2909.0, 2950.0, 2969.0, 2970.0, 3202.0, 3342.0, 3900.0, 4007.0, 4052.0, 4058.0, 4059.0, 4060.0, 19.0, 20.0, 21.0, 31.0, 103.0, 136.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 212.0, 243.0, 244.0, 245.0, 246.0, 247.0, 261.0, 270.0, 271.0, 294.0, 302.0, 340.0, 343.0, 354.0, 356.0, 357.0, 358.0;

    int numInstances = data[0].length;

    ArrayList<Attribute> atts = new ArrayList<Attribute>();
    List<Instance> instances = new ArrayList<Instance>();
    for(int dim = 0; dim < 2; dim++)
    
        Attribute current = new Attribute("Attribute" + dim, dim);

        if(dim == 0)
        
            for(int obj = 0; obj < numInstances; obj++)
            
                instances.add(new SparseInstance(numInstances));
            
        

        for(int obj = 0; obj < numInstances; obj++)
        
            instances.get(obj).setValue(current, data[dim][obj]);
            //instances.get(obj).setWeight(weights[obj]);
        
        atts.add(current);
    

    Instances newDataset = new Instances("Dataset", atts, instances.size());

    for(Instance inst : instances)
        newDataset.add(inst);

    LinearRegression lr = new LinearRegression();

    lr.buildClassifier(newDataset);             

【问题讨论】:

【参考方案1】:

我认为这可能会对您有所帮助:

FastVector atts = new FastVector();
List<Instance> instances = new ArrayList<Instance>();
for(int dim = 0; dim < numDimensions; dim++)

    // Create new attribute / dimension
    Attribute current = new Attribute("Attribute" + dim, dim);
    // Create an instance for each data object
    if(dim == 0)
    
        for(int obj = 0; obj < numInstances; obj++)
        
            instances.add(new SparseInstance(numDimensions));
        
    

    // Fill the value of dimension "dim" into each object
    for(int obj = 0; obj < numInstances; obj++)
    
        instances.get(obj).setValue(current, data[dim][obj]);
    

    // Add attribute to total attributes
    atts.addElement(current);


// Create new dataset
Instances newDataset = new Instances("Dataset", atts, instances.size());

// Fill in data objects
for(Instance inst : instances)
    newDataset.add(inst);

之后Instances 是你的数据集。

注意:Weka的当前版本(3.6.8)没有报错,尽管我使用了FastVector

但是,对于 Developer 版本 (3.7.7),请使用:

ArrayList<Attribute> atts = new ArrayList<Attribute>();
List<Instance> instances = new ArrayList<Instance>();
for(int dim = 0; dim < numDimensions; dim++)

    Attribute current = new Attribute("Attribute" + dim, dim);
    if(dim == 0)
    
        for(int obj = 0; obj < numInstances; obj++)
        
            instances.add(new SparseInstance(numDimensions));
        
    

    for(int obj = 0; obj < numInstances; obj++)
    
        instances.get(obj).setValue(current, data[dim][obj]);
    

    atts.add(current);


Instances newDataset = new Instances("Dataset", atts, instances.size());

for(Instance inst : instances)
    newDataset.add(inst);

【讨论】:

太棒了 这很有用。但是,在编码时,我遇到了一个错误。 我在问题中添加了例外。 @AakarGupta 与答案here 类似,您的数据必须包含类索引,因此Attribute 说明对象属于哪个类。你没有设置这个。如果可行,请考虑accept我的回答。 好的,前面的错误不存在,但即使在设置类索引后,我在同一行上也遇到了另一个异常。这是堆栈跟踪 - Thread [main] (Suspended (exception IndexOutOfBoundsException)) ArrayList.rangeCheck(int) 行:不可用 ArrayList.get(int) 行:不可用 Instances.attribute(int ) 行:341 SparseInstance(AbstractInstance).attributeSparse(int) 行:91 ReplaceMissingValues.batchFinished() 行:189 Filter.useFilter(Instances, Filter) 行:682 LinearRegression.buildClassifier(Instances) 行:207 MainTest.test() 行: 63 MainTest.main(String[]) 行: 23【参考方案2】:

您想要构造一个Instances 对象,该类将覆盖toString() 以以ARFF 格式输出。如果 FastVector 已被弃用,您可以使用 Vector。

【讨论】:

以上是关于java如何创建文件?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中如何使用创建CSV文件

Java如何获取文件的创建时间

idea如何把已经创建的java文件放入另一个包名内

java 如何获得一个文件夹的创建时间 具体点

java 查看文件创建时间

java如何在linux下创建文件夹