Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не пишется стринг в файл


Автор: batex 17.9.2011, 21:14
Столкнулся с проблемой. Не могу записать String в файл. Пишет это : Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
    at FileSearch.main(FileSearch.java:81)


Вот суть кода, где имею дело с этим файлом(args[2] - имя файла, 12345)
Код

public static String NameFile;
NameFile = args[2];
File f0;
        f0 = new File(NameFile);
        if(!f0.exists()){
            f0.createNewFile();
            System.out.println("New File " +NameFile+ "has been created" );
        }
BufferedWriter out = new BufferedWriter(new FileWriter(NameFile));

Object NameFiles[] = new Object[1000];
int i = 0;
for (File f : folder.listFiles())
{
    NameFiles[i] = f;
        i++;
}
int point = i;
i=0;

String Name;
for (i = 0; i<point ;i++)
        {
            Scanner scan = new Scanner(new FileReader((File)NameFiles[i]));
            
            ////////////////
            Name = (String)NameFiles[i];
            
            out.write(Name);
..........................


Насколько я понимаю, не пишет из-за того, что NameFiles[i] это Object.

PS сделал вывод через FileOutputStream fos = new FileOutputStream(NameFile);
        ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(NameFiels[i]);
Выводит много ереси. Как убрать ересь?

PSS Вот весь код. Ищет файлы в директории, открывает и ищет подстроки в строках. Вывод на экран и в файл.
Код


import java.io.*;
import java.util.Scanner;




public class FileSearch{
    public static String str;
    public static String dir;
    public static String NameFile;
    /**
     * @param args
     * @return 
     * @throws IOException 
     */
    
    

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        
        if (args.length < 1)
        {
            System.out.println("Error. No args");
            System.exit(0);
        }
        if (args.length > 3)
        {
            System.out.println("Error. Many args");
            System.exit(0);
        }
        
        dir = args[0];
        NameFile = args[2];
        str = args[1];
                
        File Fdir;
        Fdir = new File(dir);
        if (!Fdir.exists())
        {
            System.out.println("Error. Dir " + dir + "is not found");
            System.exit(0);
        }
        
        
        
        File f0;
        f0 = new File(NameFile);
        if(!f0.exists()){
            f0.createNewFile();
            System.out.println("New File " +NameFile+ "has been created" );
        }
        
        
        //BufferedWriter out = new BufferedWriter(new FileWriter(NameFile));
        
        FileOutputStream fos = new FileOutputStream(NameFile);
        ObjectOutputStream out = new ObjectOutputStream(fos);
        
        System.out.println(dir + " "  + NameFile + " " + str);
        File folder = new File(dir);
        
        Object NameFiles[] = new Object[1000];
        int i = 0;
        for (File f : folder.listFiles())
        {
             NameFiles[i] = f;
             i++;
        }
        int point = i;
        i=0;
        
        
        String s;
        int pointer;
        String Name;
        for (i = 0; i<point ;i++)
        {
            Scanner scan = new Scanner(new FileReader((File)NameFiles[i]));
            System.out.println(NameFiles[i]);
            ////////////////
            
            out.writeObject("\t"+ NameFiles[i]+"\n");
            /////////////////////////
            
            while(scan.hasNext())
            {
                s = scan.next();
                
                pointer = s.indexOf (str);
                if (pointer != -1)
                {
                    System.out.println("s = "+s);
                    /////////////////
                    out.writeObject("s = " +s+ "\n");
                    
                }
            }
            System.out.println("------------");
            out.writeObject("++++++++++\n");
            ///////////
            
        }
    out.close();
    }
    }

Автор: jk1 18.9.2011, 09:00
В Name надо получить имя файла? тогда вот так
Код

Name = ((File)NameFiles[i]).getName();


P.S.: А почему бы не объявить FileNames как File[] ?

Автор: batex 18.9.2011, 11:07
ну да, согласен, лучше объявить как File. Имя файлов мы получаем в NameFiles[i]. Потом приравниваем Name (string) к NameFiles[i]. С помощью вот этого 
Код
//BufferedWriter out = new BufferedWriter(new FileWriter(NameFile));
out.write(Name); 

он ничего не выводит. А с помощью этого:
Код

FileOutputStream fos = new FileOutputStream(NameFile);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(Name); 

он выводит перед название файла ересь.

Автор: jk1 18.9.2011, 14:02
Цитата

он выводит перед название файла ересь.

Что просите, то и выводит. ObjectOutputStream предназначен для сериализации, а не для записи текстовых файлов. Вот правильный вариант
Код

FileWriter writer = new FileWriter(NameFile);
writer.write(Name);


Кстати, Ваш код падает, если в папке есть другие папки. Проверяйте файлы, не являются ли они вдруг папками. 

Автор: batex 18.9.2011, 17:05
Спасибо, все заработало. То, что код падает, если есть папки в директории, я знаю, просто хотел сначала с выводом разобраться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)