Если вы не кодируете веб-приложение, убедитесь, что ваш класс, в котором выполняется @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();
}
}
Я думаю, вы могли бы просто проверить первые 1000 (произвольное число) символов и посмотреть, есть ли непечатаемые символы или все они ascii в определенном диапазоне. Если последнее, предположите, что это текст?
Все, что вы делаете, будет предположением.
Чтобы получить реальный тип файла файла, вы должны проверить его заголовок, который не будет изменен, даже если расширение изменено. Вы можете получить список заголовков здесь и использовать в своем коде что-то вроде этого:
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
}
}
}
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;
}
У меня есть решение ниже, которое работает для меня. Это общее решение, которое проверяет все типы двоичного файла.
/// <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;
}
В общем: нет способа сказать.
Текстовый файл, хранящийся в UTF-16, скорее всего будет выглядеть двоичным, если вы откроете его с 8-битной кодировкой. Точно так же кто-то мог сохранить текстовый файл как .doc
(это документ).
Пока вы можете открыть файл и посмотреть на какой-то контент, все такие эвристики будут иногда терпеть неудачу (например, попытки notepad для этого, осторожным выбором нескольких символов, блокнот угадает неправильно и отобразит совершенно другой контент).
Если у вас есть конкретный сценарий, а не возможность открывать и обрабатывать что-либо, вы должны быть способны сделать намного лучше.