Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не пишется стринг в файл 
V
    Опции темы
batex
Дата 17.9.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.5.2010

Репутация: нет
Всего: нет



Столкнулся с проблемой. Не могу записать 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();
    }
    }


Это сообщение отредактировал(а) batex - 17.9.2011, 21:37
PM MAIL   Вверх
jk1
Дата 18.9.2011, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



В Name надо получить имя файла? тогда вот так
Код

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


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


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
batex
Дата 18.9.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.5.2010

Репутация: нет
Всего: нет



ну да, согласен, лучше объявить как 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); 

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


Это сообщение отредактировал(а) batex - 18.9.2011, 11:07
PM MAIL   Вверх
jk1
Дата 18.9.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

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

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

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


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


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
batex
Дата 18.9.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.5.2010

Репутация: нет
Всего: нет



Спасибо, все заработало. То, что код падает, если есть папки в директории, я знаю, просто хотел сначала с выводом разобраться
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.