Чтение потока vb.net читает из файла .accdb и .xml без ошибки [дубликат]

Если вы не кодируете веб-приложение, убедитесь, что ваш класс, в котором выполняется @Autowiring, является весенним бобом. Как правило, весенний контейнер не будет знать о классе, который мы могли бы назвать весенним бобом. Мы должны рассказать весенний контейнер о наших весенних классах.

Этого можно достичь путем настройки в appln-contxt или лучший способ - аннотировать класс как @Component и, пожалуйста, не создавайте аннотированный класс, используя новый оператор. Убедитесь, что вы получили его из контекста Appln, как показано ниже.

@Component
public class MyDemo {


    @Autowired
    private MyService  myService; 

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
            System.out.println("test");
            ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
            System.out.println("ctx>>"+ctx);

            Customer c1=null;
            MyDemo myDemo=ctx.getBean(MyDemo.class);
            System.out.println(myDemo);
            myDemo.callService(ctx);


    }

    public void callService(ApplicationContext ctx) {
        // TODO Auto-generated method stub
        System.out.println("---callService---");
        System.out.println(myService);
        myService.callMydao();

    }

}
12
задан Sev 20 January 2011 в 09:31
поделиться

5 ответов

Я думаю, вы могли бы просто проверить первые 1000 (произвольное число) символов и посмотреть, есть ли непечатаемые символы или все они ascii в определенном диапазоне. Если последнее, предположите, что это текст?

Все, что вы делаете, будет предположением.

6
ответ дан Guy 22 August 2018 в 21:30
поделиться
  • 1
    и, возможно, проверьте регулярные интервалы пробелов и строк новой строки – Wouter 20 January 2011 в 09:50

Чтобы получить реальный тип файла файла, вы должны проверить его заголовок, который не будет изменен, даже если расширение изменено. Вы можете получить список заголовков здесь и использовать в своем коде что-то вроде этого:

using(var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
   using(var reader = new BinaryReader(stream))
   {
     // read the first X bytes of the file
     // In this example I want to check if the file is a BMP
     // whose header is 424D in hex(2 bytes 6677)
     string code = reader.ReadByte().ToString() + reader.ReadByte().ToString();
     if (code.Equals("6677"))
     {
        //it's a BMP file
     }
   }
}
2
ответ дан Amarus 22 August 2018 в 21:30
поделиться
  • 1
    Меня интересует ваша ссылка на «здесь», но она сломана. Вы знаете, какой URL-адрес был или что нового? – MacGyver 25 February 2012 в 21:19
  • 2
    @MacGyver: Извините, что неработающая ссылка вышла из-под контроля. Я столкнулся с этим решением на чужом посту. – Danny Chen 26 February 2012 в 12:09
  • 3
    Этот подход является ошибочным. Невозможно провести различие между файлом BMP и файлом, который начинается с BM-символов, что, скорее всего, произойдет. – mafu 27 April 2012 в 13:16
public bool IsTextFile(string FilePath)
  using (StreamReader reader = new StreamReader(FilePath))
  {
       int Character;
       while ((Character = reader.Read()) != -1)
       {
           if ((Character > 0 && Character < 8) || (Character > 13 && Character < 26))
           {
                    return false; 
           }
       }
  }
  return true;
}
0
ответ дан Hero 22 August 2018 в 21:30
поделиться

У меня есть решение ниже, которое работает для меня. Это общее решение, которое проверяет все типы двоичного файла.

     /// <summary>
     /// This method checks whether selected file is Binary file or not.
     /// </summary>     
     public bool CheckForBinary()
     {

             Stream objStream = new FileStream("your file path", FileMode.Open, FileAccess.Read);
             bool bFlag = true;

             // Iterate through stream & check ASCII value of each byte.
             for (int nPosition = 0; nPosition < objStream.Length; nPosition++)
             {
                 int a = objStream.ReadByte();

                 if (!(a >= 0 && a <= 127))
                 {
                     break;            // Binary File
                 }
                 else if (objStream.Position == (objStream.Length))
                 {
                     bFlag = false;    // Text File
                 }
             }
             objStream.Dispose();

             return bFlag;                   
     }
2
ответ дан Neel Maheta 22 August 2018 в 21:30
поделиться
  • 1
    Конечно, это будет работать только для реального ASCII. Не для других персонажей с акцентами – Harald Coppoolse 18 April 2018 в 12:36

В общем: нет способа сказать.

Текстовый файл, хранящийся в UTF-16, скорее всего будет выглядеть двоичным, если вы откроете его с 8-битной кодировкой. Точно так же кто-то мог сохранить текстовый файл как .doc (это документ).

Пока вы можете открыть файл и посмотреть на какой-то контент, все такие эвристики будут иногда терпеть неудачу (например, попытки notepad для этого, осторожным выбором нескольких символов, блокнот угадает неправильно и отобразит совершенно другой контент).

Если у вас есть конкретный сценарий, а не возможность открывать и обрабатывать что-либо, вы должны быть способны сделать намного лучше.

9
ответ дан Richard 22 August 2018 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: